我一直在尝试使用oooop的勺子将数据从oracle Express版11g R2导入hadoop。
我安装了CDH sqoop并尝试集成已经运行的apache hadoop。
我发现oraoop使用正确,但我在导入时面临以下问题。我也尝试使用apache sqoop和apache hadoop,但仍面临以下问题。 网络搜索建议使用CDH hadoop而不是apache Hadoop。
**
线程“main”中的异常java.lang.IncompatibleClassChangeError: 找到类org.apache.hadoop.mapreduce.JobContext,但接口是 预期 at com.quest.oraoop.OraOopDataDrivenDBInputFormat.getDesiredNumberOfMappers(OraOopDataDrivenDBInputFormat.java:201) 在com.quest.oraoop.OraOopDataDrivenDBInputFormat.getSplits(OraOopDataDrivenDBInputFormat.java:51)
**
总结一下,
CDH sqoop + Apache Hadoop - 上述
导致数据导入失败异常Apache Sqoop + Apache hadoop - 数据导入失败并出现上述异常
CDH Sqoop + CDH Hadoop - 这是正确的组合吗?
有什么建议吗?我不确定我是否采取正确的方式。请帮忙。
答案 0 :(得分:2)
Hadoop经历了从Hadoop 1.0到Hadoop 2.0(相应地从CDH3到CDH4)的巨大代码重构。一个副作用是针对Hadoop 1.0(CDH3)编译的代码不与Hadoop 2.0(CDH4)兼容,反之亦然。但是源代码是兼容的,因此只需要使用目标Hadoop分发重新编译代码。
当您在Hadoop 2.0(CDH4)上运行为Hadoop 1.0(CDH3)编译的代码时,异常“找到类X,但预期接口”是非常常见的,反之亦然。
解决方案很简单,您需要同步版本。使用CDH3 Hadoop + CDH3 Sqoop或CDH4 Hadoop + CDH4 Sqoop是最简单的方法。如果您更喜欢使用上游Sqoop版本,那么您必须确保使用为您的Hadoop发行版编译的二进制工件。 Sqoop使得这很容易,因为目标hadoop分布在工件名称中编码 - 例如sqoop-1.4.2.bin__hadoop-1.0.0.tar.gz意味着在Hadoop 1.0 [1]上使用。
完全相同的约束适用于连接器。您必须下载正在运行的Hadoop版本的连接器。在OraOop的情况下,CDH3和CDH4也有单独的伪像[2]。
Jarcec
链接:
1:http://www.apache.org/dist/sqoop/1.4.2/
2:https://ccp.cloudera.com/display/con/Quest+Data+Connectors