3

私はsqoopで以下のコマンドを実行しています

sqoop import --connect jdbc:mysql://localhost/hadoopguide --table widgets

私のバージョンの sqoop : Sqoop 1.4.4.2.0.6.1-101
Hadoop -- Hadoop 2.2.0.2.0.6.0-101

どちらも hortonworks ディストリビューションから取得しました。HADOOP_HOME、HCAT_HOME、SQOOP_HOME などのすべてのパスが適切に設定されています。sqoop で list-database、list-tables コマンドを実行することで、mysql データベースからデータベースのリスト、テーブルのリストを取得できます。--query 'select * from widgets'; からデータを取得することもできます。しかし、 --table オプションを使用するとエラーが発生します。

14/02/06 14:02:17 WARN mapred.LocalJobRunner: job_local177721176_0001
java.lang.Exception: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class widgets not found
        at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class widgets not found
        at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)
        at org.apache.sqoop.mapreduce.db.DBConfiguration.getInputClass(DBConfiguration.java:394)
        at org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.createDBRecordReader(DataDrivenDBInputFormat.java:233)
        at org.apache.sqoop.mapreduce.db.DBInputFormat.createRecordReader(DBInputFormat.java:236)
        at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.<init>(MapTask.java:491)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:734)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
        at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:235)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: Class widgets not found
        at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626)
        at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718)
        ... 13 more
4

5 に答える 5

6

--bindirオプションを使用して、現在の作業ディレクトリを指定します。

sqoop import --bindir ./ --connect jdbc:mysql://localhost/hadoopguide --table widgets
于 2015-05-20T17:04:57.027 に答える
0

ClassNotFoundException のもう 1 つの修正方法は、ユーザーのクラスパスを最初に使用するように Hadoop に指示することです (-Dmapreduce.job.user.classpath.first=true)。これは、コマンド ラインまたはオプション ファイルで行うことができます。インポート オプション ファイルの先頭は次のようになります。

#Options file for Sqoop import
import

-Dmapreduce.job.user.classpath.first=true

これにより、データを avrodatafile としてインポートしようとしたときに ClassNotFoundException が修正されました

于 2019-11-06T18:36:32.583 に答える