我在macbook上安装了sqoop 1
,并做了ant包。然后,我将HADOOP_HOME
和HADOOP_MAPRED_HOME
设置为/usr/local/hadoop
处的现有hadoop主页。
当我运行导入命令
时bin/sqoop import --options-file /path/sqoop_params.txt --table recipe
其中sqoop_params.txt包含用户名密码和postgres url。
它说
java.lang.Exception: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class recipe not found
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
为什么sqoop会将表名误认为是java类?
答案 0 :(得分:3)
Sqoop生成可由MapReduce使用的代码。要查看生成的代码,可以使用code-gen tool查看生成的Java文件。它应该与您正常导入的表具有相同的名称。您可以使用--class-name
更改名称。
使用LocalJobRunner时,生成的类有时不会成为类路径的一部分。您可以使用-libjars
将jar传递给MapReduce作业。
示例:
生成jar:sqoop codegen --connect "jdbc:mysql://example.com/sqoop" --username sqoop --password sqoop --table tbl
在输出中查找行:Writing jar file: /tmp/sqoop-abe/compile/4182409b0f559d7259a32a950627e1aa/tbl.jar
在导入命令中使用上述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
有关使用本地跑步者的更多信息,请查看此blog post。
除非必须,否则我不会使用本地mapreduce。检查mapreduce配置并确保mapreduce.framework.name
未设置为本地。有关详细信息,请查看hadoop docs。
答案 1 :(得分:3)
解决此问题的另一种更简单的方法是在scoop上指定bindir选项,该选项告知保存生成的类的位置。
--bindir ./