2016-03-01 3 views
0

Я установил Sqoop 1.4.6 и попытался импортировать некоторые данные из MySQL 5.6.29 в Hadoop версии 2.7.2 с помощью следующей команды:Sqoop не в состоянии импортировать MySQL в Hadoop, бросает ClassNotFoundException

sqoop import --connect jdbc:mysql://<server_name>:3306/<dbname> --username <user-name> --password <password> --m 1 --table <table-name> --target-dir <hadoop-target-folder>

Затем, я получаю следующее сообщение об ошибке:

java.lang.Exception: java.lang.RuntimeException: 
java.lang.ClassNotFoundException: Class <ClassName> not found 
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) 
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522) 
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class <ClassName> not found 
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195) 
at org.apache.sqoop.mapreduce.db.DBConfiguration.getInputClass(DBConfiguration.java:403) 
at org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.createDBRecordReader(DataDrivenDBInputFormat.java:237) 
at org.apache.sqoop.mapreduce.db.DBInputFormat.createRecordReader(DBInputFormat.java:263) 
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.<init>(MapTask.java:515) 
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:758) 
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: Class <ClassName> not found 
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2101) 
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193) 
... 12 more 

Там, возможно, был подобный вопрос, но я не нашел ответа ...

Любые идеи? Благодаря

+0

Какой драйвер вы используете? – mgaido

+0

Я использую JDBC MySQL Connector версии 5.1.38, то есть mysql-connector-java-5.1.38-bin.jar, и скопировал его в каталог $ SQOOP_HOME/libexec/lib. Я нахожусь на Mac, поэтому я установил Sqoop, используя варево. –

ответ

0

Сформировать банку: scoop codegen --connect "jdbc:mysql://example.com/sqoop" --username sqoop --password sqoop --table tbl

Посмотрите на строку в выходной: Запись баночки файла:

/tmp/sqoop-abe/compile/4182409b0f559d7259a32a950627e1aa/tbl.jar 

Используйте выше банки в вашей импорта вводе команды:

sqoop import -fs local -jt local -libjars /tmp/sqoop-abe/compile/4182409b0f559d7259a32a950627e1aa/tbl.jar --connect "jdbc:mysql://example.com/sqoop" --username sqoop --password sqoop --table tbl 
0

Основной причиной является то, что при использовании LocalJobRunner для выполнения задания импорта он не может загрузить jar-генерировать sqoop.

Решение 1. изменить hadoop для запуска в режиме кластера с одним узлом, http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html.

Решение 2. Сначала создайте файл jar, а затем используйте параметр -libjars.

Смежные вопросы