CDH4.3 中的 Sqoop 1.4.4 不兼容ClassChangeError

Posted

技术标签:

【中文标题】CDH4.3 中的 Sqoop 1.4.4 不兼容ClassChangeError【英文标题】:Sqoop 1.4.4 in CDH4.3 incompatibleClassChangeError 【发布时间】:2013-08-13 06:49:29 【问题描述】:

Sqoop 1.4.4 支持使用复合行键从 db 导入 HBase,而在 1.4.4 之前,只能将 db 中的一列用作行键。到目前为止,CDH4.3 和 HDP1.3 都只支持 Sqoop 1.4.3。我试图将 sqoop 1.4.4 交换到我的 CDH4.3 环境中。当我运行一个简单的 Sqoop 作业时,出现以下错误:

13/08/12 23:36:14 INFO mapred.JobClient: Cleaning up the staging area hdfs://localhost.localdomain:8020/user/cloudera/.staging/job_201308122236_0001
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
    at org.apache.sqoop.mapreduce.DelegatingOutputFormat.checkOutputSpecs(DelegatingOutputFormat.java:63)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:984)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:945)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:945)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:566)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:596)
    at org.apache.sqoop.mapreduce.ImportJobBase.doSubmitJob(ImportJobBase.java:186)
    at org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:159)
    at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:239)
    at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:600)
    at org.apache.sqoop.manager.mysqlManager.importTable(MySQLManager.java:118)
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:413)
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:502)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:145)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:238)

以前有人买过这个吗?谁能指点一下 Sqoop 1.4.4 兼容哪些版本的mapreduce、HBase 和HDFS?

【问题讨论】:

【参考方案1】:

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,但预期接口”非常常见,反之亦然。

解决方法很简单,你需要同步版本。您必须确保您使用的是为您的 Hadoop 发行版编译的二进制工件。 Sqoop 使这很容易,因为目标 hadoop 分布在工件名称中编码 - 例如 sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz 旨在用于 Hadoop 2.0 和 CDH4 [1]。

贾西克

链接:

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

【讨论】:

以上是关于CDH4.3 中的 Sqoop 1.4.4 不兼容ClassChangeError的主要内容,如果未能解决你的问题,请参考以下文章

Sqoop--安装配置

Sqoop学习笔记_Sqoop的基本使用一

Hadoop-3.0.0 与旧版本 Hive、Pig、Sqoop 和 Spark 的兼容性如何

快速搭建Hadoop-Hive-Zoopkeeper-Sqoop环境进入Sqoop学习环境

Sqoop环境搭建 01sqoop-1.4.7 安装配置CentOS Linux release 7.5.1804(附Sqoop1最新版+Sqoop2最新版安装包+MySQL驱动包资源)

使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法