sqoop无法导入表

50pmv0ei  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(472)

我在sqoop上按命令运行

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

我的sqoop版本:sqoop1.4.4.2.0.6.1-101
hadoop—hadoop 2.2.0.2.0.6.0-101
都是从hortonworks发行的。hadoop\u home、hcat\u home、sqoop\u home等所有路径都设置正确。通过在sqoop中运行list database,list tables命令,我可以从mysql数据库中获取数据库列表,表列表。甚至可以从——查询“select*fromwidgets”获取数据;但当我使用--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
pgky5nke

pgky5nke1#

在我将.class文件从/tmp/sqoop hduser/compile/复制到hdfs/home/hduser/以及运行sqoop的当前工作目录之后,问题就解决了。

nzrxty8p

nzrxty8p2#

classnotfoundexception的另一个修复方法是告诉hadoop首先使用用户类路径(-dmapreduce.job.user.classpath.first=true)。这可以在命令行或选项文件中。导入选项文件的顶部是:


# Options file for Sqoop import

import

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

当我尝试将数据作为avrodatafile导入时,修复了classnotfoundexception

eyh26e7m

eyh26e7m3#

指定 --bindir 其中编译的代码 .jar 应找到文件。
如果没有这些参数,sqoop将把生成的java源文件放在您当前的工作目录中,并编译 .class 文件和 .jar 文件输入 /tmp/sqoop-<username>/compile .

rjzwgtxy

rjzwgtxy4#

使用 --bindir 选项并指向当前工作目录。

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

wkyowqbh5#

用于将特定表导入到 hdfs ,运行:

sqoop import --connect jdbc:mysql://localhost/databasename --username root --password***--table tablename --bindir /usr/lib/sqoop/lib/ --driver com.mysql.jdbc.Driver --target-dir /directory-name

确保 /usr/lib/sqoop/* 以及 /usr/local/hadoop/* 应该属于同一个用户,否则会出现“权限被拒绝”这样的错误。
ps:确保您已安装 mysql-java 在运行命令之前。我安装了hadoop版本2.7.3和连接器5.0.8

相关问题