2013-08-13 3 views
0

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 работу, я получил ошибку ниже:Sqoop 1.4.4 в CDH4.3 incompatibleClassChangeError

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?

ответ

3

Hadoop прошел через огромный код рефакторинга от Hadoop 1.0 до Hadoop 2.0 (соответственно от CDH3 до CDH4). Один побочный эффект заключается в том, что код, составленный против Hadoop 1.0 (CDH3), несовместим с Hadoop 2.0 (CDH4) и наоборот. Однако исходный код совместим, и поэтому нужно просто перекомпилировать код с целевым распределением Hadoop.

Исключение «Найденный класс X, но интерфейс ожидался» очень распространен, когда вы запускаете код, который скомпилирован для Hadoop 1.0 (CDH3) на Hadoop 2.0 (CDH4) или наоборот.

Решение простое, вам нужно синхронизировать версии. Вы должны убедиться, что вы используете бинарный артефакт, скомпилированный для вашего распределения Hadoop. Sqoop делает это легко, поскольку целевое распределение hadoop кодируется в имени артефакта - например, sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz предназначен для использования на Hadoop 2.0 и CDH4 [1].

Jarcec

Ссылки:

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

 Смежные вопросы

  • Нет связанных вопросов^_^