복붙노트

[HADOOP] Sqoop 가져 오기 실패, UnsupportedClassVersionError

HADOOP

Sqoop 가져 오기 실패, UnsupportedClassVersionError

sqoop을 사용하여 MySQL에서 HDFS로 테이블을 가져 오려고했습니다. 사용 된 명령 줄은

sqoop import --connect jdbc:mysql://192.168.10.452/qw_key_test --username qw -P --split-by qw_id -m 10 --target-dir /user/perf/qwperf/sqoops --verbose --table qw_perf_store_key

아래와 같이 지원되지 않는 버전으로 매퍼가 실패합니다.

2013-05-22 17:46:24,165 WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter is deprecated. Use org.apache.hadoop.mapreduce.TaskCounter instead
2013-05-22 17:46:24,534 WARN org.apache.hadoop.conf.Configuration: session.id is deprecated. Instead, use dfs.metrics.session-id
2013-05-22 17:46:24,535 INFO org.apache.hadoop.metrics.jvm.JvmMetrics: Initializing JVM Metrics with processName=MAP, sessionId=
2013-05-22 17:46:24,835 INFO org.apache.hadoop.util.ProcessTree: setsid exited with exit code 0
2013-05-22 17:46:24,839 INFO org.apache.hadoop.mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@191410e5
2013-05-22 17:46:25,278 INFO org.apache.hadoop.mapred.TaskLogsTruncater: Initializing logs' truncater with mapRetainSize=-1 and reduceRetainSize=-1
2013-05-22 17:46:25,280 FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.UnsupportedClassVersionError: qw_perf_store_key : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:1510)
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1475)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1569)
    at org.apache.sqoop.mapreduce.db.DBConfiguration.getInputClass(DBConfiguration.java:276)
    at org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.createDBRecordReader(DataDrivenDBInputFormat.java:230)
    at org.apache.sqoop.mapreduce.db.DBInputFormat.createRecordReader(DBInputFormat.java:236)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:617)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:325)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    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:1332)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)

어떤 아이디어? CentOS 6.2, CDH4 사용 JDK7_21, sqoop : Sqoop 1.4.1-cdh4.1.3 (git commit id 0ff32b245c1d4c75e9f034414ebd8cfcdd140e7e)

해결법

  1. ==============================

    1.major.minor 버전 51.0은 JDK 1.7을 나타내며 사용자가 언급 한 내용도 확인합니다. JDK 1.7은 Sqoop 버전 1.4.1-cdh4.1.3과 호환되지 않는 것으로 보입니다. CDH4에 대해이 지원되는 JDK 요구 사항에 따라 JDK 1.7은 CDH 4.2 이상 버전에서 지원됩니다.

    major.minor 버전 51.0은 JDK 1.7을 나타내며 사용자가 언급 한 내용도 확인합니다. JDK 1.7은 Sqoop 버전 1.4.1-cdh4.1.3과 호환되지 않는 것으로 보입니다. CDH4에 대해이 지원되는 JDK 요구 사항에 따라 JDK 1.7은 CDH 4.2 이상 버전에서 지원됩니다.

    Oracle JDK 설치를 사용하여 JAVA_HOME을 JDK 1.6으로 설치 및 설정 한 후 sqoop을 실행하십시오.

  2. ==============================

    2.Sqoop이 JDK7에서 실행되고 Hadoop 클러스터가 JDK6에있을 때이 문제가 발생했습니다. 모든 Java 애플리케이션이 동일한 주요 JDK 버전을 사용하고 있는지 확인하십시오.

    Sqoop이 JDK7에서 실행되고 Hadoop 클러스터가 JDK6에있을 때이 문제가 발생했습니다. 모든 Java 애플리케이션이 동일한 주요 JDK 버전을 사용하고 있는지 확인하십시오.

  3. ==============================

    3.Cloudera Manager가 기본적으로 설치 한 $ JAVA_HOME을 j2sdk1.6-oracle로 변경합니다. 그런 다음 PATH 변수를 내 보내서 bin을 포함 시켰으며 작동했습니다.

    Cloudera Manager가 기본적으로 설치 한 $ JAVA_HOME을 j2sdk1.6-oracle로 변경합니다. 그런 다음 PATH 변수를 내 보내서 bin을 포함 시켰으며 작동했습니다.

  4. from https://stackoverflow.com/questions/16692205/sqoop-import-failed-unsupportedclassversionerror by cc-by-sa and MIT license