线程“main”中的异常java.lang.IncompatibleClassChangeError:找到接口org.apache.hadoop.mapreduce.JobContext,但是期望类?

时间:2014-12-03 10:59:16

标签: mysql hadoop sqoop import-table

我使用的是hadoop 1.0和sqoop 1.4,彼此兼容。 当我尝试将表从MySQL导入到hdfs时。

sqoop import --connect jdbc:mysql://localhost/mydemo --table wordcount -m 1 --username root --password root123

我收到以下错误

  

线程中的异常" main" java.lang.IncompatibleClassChangeError:   找到接口org.apache.hadoop.mapreduce.JobContext,但是类是   预期?

我尝试使用hadoop 1.0和2.0运行sqoop 1.4仍然得到相同的错误。 我已经尝试过带有hadoop 2.0的sqoop 1.99。因此,除了兼容性之外,请提出一些不同的建议。

2 个答案:

答案 0 :(得分:1)

Sqoop和Sqoop2的binary distributions根据Hadoop版本而有所不同。如果使用错误版本的Hadoop编译或者系统上有错误的hadoop库,则可以在Sqoop2中看到此类错误。试图解决这个问题:

  1. 寻找可能进入类路径的旧hadoop罐子。 find / -name 'hadoop*.jar'应该有用。
  2. 确保您已下载了Sqoop的二进制分发版。如果您正在使用Hadoop2,请下载Sqoop2 for Hadoop2。如果您正在使用Hadoop1,请将Sqoop2下载到Hadoop1。
  3. 通过<server configuration directory>/catalina.properties中的tomcat属性显式设置类路径。罐子可以明确添加到common.loader
  4. 如果其他所有方法都失败了,请与Sqoop mailing list联系。

答案 1 :(得分:0)

在版本2中安装了hadoop版本1的sqoop tar文件时,通常会发生此错误。尝试下载hadoop版本2的sqoop tar文件并安装它。问题肯定会得到解决。 hadoop版本2的sqoop文件如下所示

sqoop-1.4.6.bin __ ** Hadoop的2.0.4 - ** alpha.tar.gz