我已经安装了apache hadoop 2.7.1并集成了apache sqoop 1.4.6。当我尝试使用sqoop命令从MYSQL数据库导入到HIVE时:
sqoop import \
--connect "jdbc:mysql://localhost:3306/assignment5" \
--username root \
--password cg \
--table emp_detail \
--fields-terminated-by ',' \
--lines-terminated-by '\n' \
--hive-home /user/hive/warehouse/assignment5.db \
--hive-import \
--hive-table emp_detail
我的问题是:
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
at org.apache.sqoop.config.ConfigurationHelper.getJobNumMaps(ConfigurationHelper.java:65)
at com.cloudera.sqoop.config.ConfigurationHelper.getJobNumMaps(ConfigurationHelper.java:36)
at org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.getSplits(DataDrivenDBInputFormat.java:125)
at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:301)
at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:318)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1308)
at org.apache.sqoop.mapreduce.ImportJobBase.doSubmitJob(ImportJobBase.java:196)
at org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:169)
at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:266)
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:673)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:497)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
at org.apache.sqoop.Sqoop.main(Sqoop.java:236)
有人能告诉我这个问题意味着什么吗?
答案 0 :(得分:1)
事实上,您似乎正遭受版本冲突。
回答关于兼容性的第一个问题。是的,它确实 我目前正在运行
Hadoop 2.7.1.2.4.0.0-169
Sqoop 1.4.6.2.4.0.0-169
他们一起工作。
尝试回答第二个问题。
我将通过
检查您实际上是在运行这两个版本hadoop version
sqoop version
除此之外,您可能添加到导入语句中的唯一内容(可能与您的问题无关)是指定连接驱动程序。对于mysql,我会使用
--driver com.mysql.jdbc.Driver
但是,我不确定您的问题是否与驱动程序有关。有关sqoop page
的驱动程序的更多信息但回到关于兼容性的最初问题。我很确定它是兼容的。
我希望检查系统和您的通话上运行的实际版本。
有关不同版本的Hadoop更改的详细信息,请查看此answer。