Apache Hadoop 2.7.1是否与Apache Sqoop 1.4.6兼容?

时间:2016-08-08 08:09:18

标签: mysql hadoop hive sqoop

我已经安装了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)

有人能告诉我这个问题意味着什么吗?

1 个答案:

答案 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