hadoop - Sqoop和Java 7

标签 hadoop java-7 sqoop

我正在尝试使用sqoop将MySQL表导入HDFS。我正在使用JDK 1.7.0_45和CDH4.4。我实际上使用的是cloudera的预构建VM,除了将JDK更改为1.7之外,因为我想使用pydev插件进行Eclipse。我的sqoop版本是1.4.3-cdh4.4.0。

当我运行sqoop时,出现以下异常:

错误:商品:不支持的major.minor版本51.0

在执行此操作时,我已经看到此错误:
1.编译成Java 7
2.使用Java 6运行应用程序。

但这不是我这次要做的。我相信我的sqoop版本已编译为Java 6,并且我正在使用Java 7运行它,这应该很好。我认为hadoop可能正在使用JDK 6启动映射器进程,但我不知道如何更改它。我浏览了mapred配置文档,但没有看到任何设置Java版本以用于 map task 的方法。

这是相关的控制台输出:

[cloudera@localhost ~]$ echo $JAVA_HOME
/usr/java/latest
[cloudera@localhost ~]$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
[cloudera@localhost ~]$ sqoop version
Sqoop 1.4.3-cdh4.4.0
git commit id 2cefe4939fd464ba11ef63e81f46bbaabf1f5bc6
Compiled by jenkins on Tue Sep  3 20:41:55 PDT 2013
[cloudera@localhost ~]$ hadoop version
Hadoop 2.0.0-cdh4.4.0
Subversion file:///data/1/jenkins/workspace/generic-package-rhel64-6-0/topdir/BUILD/hadoop-2.0.0-cdh4.4.0/src/hadoop-common-project/hadoop-common -r c0eba6cd38c984557e96a16ccd7356b7de835e79
Compiled by jenkins on Tue Sep  3 19:33:17 PDT 2013
From source with checksum ac7e170aa709b3ace13dc5f775487180
This command was run using /usr/lib/hadoop/hadoop-common-2.0.0-cdh4.4.0.jar
[cloudera@localhost ~]$ cat mysqooper.sh
#!/bin/bash
sqoop import -m 1 --connect jdbc:mysql://localhost/$1 \
--username root --table $2 --target-dir $3
[cloudera@localhost ~]$ ./mysqooper.sh cloud commodity /user/cloudera/commodity/csv/sqooped
14/01/16 16:45:10 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
14/01/16 16:45:10 INFO tool.CodeGenTool: Beginning code generation
14/01/16 16:45:11 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `commodity` AS t LIMIT 1
14/01/16 16:45:11 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `commodity` AS t LIMIT 1
14/01/16 16:45:11 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/lib/hadoop-0.20-mapreduce
14/01/16 16:45:11 INFO orm.CompilationManager: Found hadoop core jar at: /usr/lib/hadoop-0.20-mapreduce/hadoop-core.jar
Note: /tmp/sqoop-cloudera/compile/f75bf6f8829e8eff302db41b01f6796a/commodity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
14/01/16 16:45:15 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-cloudera/compile/f75bf6f8829e8eff302db41b01f6796a/commodity.jar
14/01/16 16:45:15 WARN manager.MySQLManager: It looks like you are importing from mysql.
14/01/16 16:45:15 WARN manager.MySQLManager: This transfer can be faster! Use the --direct
14/01/16 16:45:15 WARN manager.MySQLManager: option to exercise a MySQL-specific fast path.
14/01/16 16:45:15 INFO manager.MySQLManager: Setting zero DATETIME behavior to convertToNull (mysql)
14/01/16 16:45:15 INFO mapreduce.ImportJobBase: Beginning import of commodity
14/01/16 16:45:17 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
14/01/16 16:45:20 INFO mapred.JobClient: Running job: job_201401161614_0001
14/01/16 16:45:21 INFO mapred.JobClient:  map 0% reduce 0%
14/01/16 16:45:38 INFO mapred.JobClient: Task Id : attempt_201401161614_0001_m_000000_0, Status : FAILED
Error: commodity : Unsupported major.minor version 51.0
14/01/16 16:45:46 INFO mapred.JobClient: Task Id : attempt_201401161614_0001_m_000000_1, Status : FAILED
Error: commodity : Unsupported major.minor version 51.0
14/01/16 16:45:54 INFO mapred.JobClient: Task Id : attempt_201401161614_0001_m_000000_2, Status : FAILED
Error: commodity : Unsupported major.minor version 51.0
14/01/16 16:46:07 INFO mapred.JobClient: Job complete: job_201401161614_0001
14/01/16 16:46:07 INFO mapred.JobClient: Counters: 6
14/01/16 16:46:07 INFO mapred.JobClient:   Job Counters 
14/01/16 16:46:07 INFO mapred.JobClient:     Failed map tasks=1
14/01/16 16:46:07 INFO mapred.JobClient:     Launched map tasks=4
14/01/16 16:46:07 INFO mapred.JobClient:     Total time spent by all maps in occupied slots (ms)=23048
14/01/16 16:46:07 INFO mapred.JobClient:     Total time spent by all reduces in occupied slots (ms)=0
14/01/16 16:46:07 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
14/01/16 16:46:07 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
14/01/16 16:46:07 WARN mapreduce.Counters: Group FileSystemCounters is deprecated. Use org.apache.hadoop.mapreduce.FileSystemCounter instead
14/01/16 16:46:07 INFO mapreduce.ImportJobBase: Transferred 0 bytes in 51.0252 seconds (0 bytes/sec)
14/01/16 16:46:07 WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter is deprecated. Use org.apache.hadoop.mapreduce.TaskCounter instead
14/01/16 16:46:07 INFO mapreduce.ImportJobBase: Retrieved 0 records.
14/01/16 16:46:07 ERROR tool.ImportTool: Error during import: Import job failed!

我尝试在JDK 1.6上运行,并且可以运行,但我真的不想每次需要使用sqoop时都切换回该状态。

有人知道我需要更改吗?

最佳答案

我相信您问题的根本原因是您的Hadoop发行版仍在JDK6上运行,而不是您所相信的JDK7。

Sqoop进程将生成使用当前使用的JDK编译的Java代码。因此,如果您在JDK7上执行Sqoop,它将使用此JDK7生成并编译代码。然后将生成的代码作为mapreduce作业的一部分提交给您的hadoop集群。因此,如果在JDK7上运行Sqoop时遇到不受支持的major.minr异常,则很可能是Hadoop集群在JDK6上运行。

我强烈建议您在hadoop守护进程上调用jinfo,以验证它们运行在哪个JDK上。

关于hadoop - Sqoop和Java 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21176063/

相关文章:

shell - 使用Shell脚本发送电子邮件并附加查询的输出

hadoop - Ubuntu平台挂载HDFS

java - 想知道我是否需要同时安装 JDK 1.6 和 1.7?

java - Java 媒体组件发生了什么变化?

java - 为什么这个JDialog在Win7模态时闪烁?

hadoop - 使用分割方式不带整数值的Hadoop-Sqoop导入

apache-spark - 为什么 spark 比 sqoop 慢,就 jdbc 而言?

hadoop - Hive Server2,直线无法理解

hadoop - 名称节点的堆大小与 HADOOP_NAMENODE_OPTS

mysql - Sqoop MySQL数据导入错误