0

我一直在尝试使用带有 oraoop 的 scoop 将数据从 oracle Express edition 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,但在 com.quest.oraoop.OraOopDataDrivenDBInputFormat.getDesiredNumberOfMappers(OraOopDataDrivenDBInputFormat.java:201) 处需要接口。 oraoop.OraOopDataDrivenDBInputFormat.getSplits(OraOopDataDrivenDBInputFormat.java:51)

**

总结一下,

CDH sqoop + Apache Hadoop - 上述数据导入失败

异常 Apache Sqoop + Apache hadoop - 数据导入失败,出现上述异常

CDH Sqoop + CDH Hadoop - 这是正确的组合吗?

有什么建议么?我不确定我是否走对了路。请帮忙。

4

1 回答 1

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] 也有单独的工件。

雅尔切克

链接:

1: http: //www.apache.org/dist/sqoop/1.4.2/

2:https ://ccp.cloudera.com/display/con/Quest+Data+Connectors

于 2013-01-08T08:45:27.863 回答