我已经安装了 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)
谁能告诉我这个问题是什么意思?
最佳答案
确实,您似乎遇到了版本冲突。
回答您关于兼容性的第一个问题。是的,它确实 我正在运行
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 .
关于mysql - Apache Hadoop 2.7.1 是否与 Apache Sqoop 1.4.6 兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824161/