
////
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
 
      http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
////

Getting Support
---------------

Some general information is available at the
http://sqoop.apache.org/

Report bugs in Sqoop to the issue tracker at
https://issues.apache.org/jira/browse/SQOOP.

Questions and discussion regarding the usage of Sqoop should be directed to the
http://sqoop.apache.org/mail-lists.html[sqoop-user mailing list].

Before contacting either forum, run your Sqoop job with the
+\--verbose+ flag to acquire as much debugging information as
possible. Also report the string returned by +sqoop version+ as
well as the version of Hadoop you are running (+hadoop version+).


