복붙노트

[HADOOP] Sqoop을 자바 (7)

HADOOP

Sqoop을 자바 (7)

나는 HDFS에 MySQL의 테이블을 가져올 Sqoop을를 사용하는 것을 시도하고있다. 나는 JDK 1.7.0_45 및 CDH4.4을 사용하고 있습니다. 나는 일식에 대한 PyDev의 플러그인을 사용하고 싶었 기 때문에 나는 1.7 JDK를 변경을 제외하고 실제로, 클라우 데라의 사전 구축 된 VM을 사용하고 있습니다. 내 Sqoop을 버전은 1.4.3-cdh4.4.0입니다.

내가 Sqoop을 실행할 때 나는이 예외가 :

오류 : 상품 : 지원되지 않는 MAJOR.MINOR 버전 51.0

내가 이런 짓을 할 때 나는 과거에이 오류를 보았다 : 1. 자바 7 컴파일 2. 자바 6를 사용하여 응용 프로그램을 실행.

하지만 내가이 시간을 일을하고 무엇을하지 않습니다. 내 Sqoop을 버전이 자바 6로 컴파일 된 생각, 나는 완벽하게 괜찮을 자바 7, 그것을 실행하는거야. 나는 어쩌면 하둡은 JDK 6 매퍼 프로세스를 시작 생각, 나는 그것을 변경하는 방법을 모른다. 나는 mapred 구성 문서를 통해 미끄러 져, 및지도 작업에 사용하는 자바 버전을 설정할 수있는 방법을 보지 않았다.

다음은 관련 콘솔 출력은 다음과 같습니다

[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을을 사용해야 할 때마다 전환하고 싶지 않아요.

아무도 내가 변경할 필요가 무엇인지 알고 있나요?

해결법

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

    1.나는 문제의 근본 원인은 당신이 그렇게 생각대로 하둡 배포판은 여전히 ​​JDK6하지 JDK7에서 실행되고 있다는 것입니다 보라.

    나는 문제의 근본 원인은 당신이 그렇게 생각대로 하둡 배포판은 여전히 ​​JDK6하지 JDK7에서 실행되고 있다는 것입니다 보라.

    Sqoop을 프로세스는 현재 사용중인 JDK로 컴파일 자바 코드를 생성합니다. 당신이 JDK7에 Sqoop을 실행 따라서 경우, 그것은 생성하고이 JDK7으로 코드를 컴파일합니다. 생성 된 코드는 맵리 듀스 작업의 일부로 하둡 클러스터에 제출됩니다. JDK7에 Sqoop을 실행하는 동안 따라서이 지원되지 않는 major.minr 예외를 얻는 경우에 당신의 하둡 클러스터가 JDK6에서 실행 가능성이 높다.

    나는 강하게이 실행되는 JDK를 확인하기 위해 하둡 deamons에있는 jinfo 호출 건의 할 것입니다.

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

    2.이것은 이전 게시물이지만, 혼합의 JDK 실행할 때 저도 같은 문제를 했어 일부 추가 정보를 추가하십시오 CDH4.4 VM에 로컬 java7 및 java6을.

    이것은 이전 게시물이지만, 혼합의 JDK 실행할 때 저도 같은 문제를 했어 일부 추가 정보를 추가하십시오 CDH4.4 VM에 로컬 java7 및 java6을.

    클라우 데라에 의해 다음 포스트에 대한 답변을 제공합니다 : http://www.cloudera.com/content/cloudera-content/cloudera-docs/CM4Ent/4.5.3/Cloudera-Manager-Enterprise-Edition-Installation-Guide/cmeeig_topic_16_2.html 난 진짜 걸쳐 변경을 한 경우 클러스터, 나는 그 지시에 따라 것입니다.

    그러나 나는 단지 VM을 사용하여 해당 문서에 중요한 단서입니다 해요 : /usr/lib64/cmf/service/common/cloudera-config.sh는 기능을 갖는다 /usr/java/jdk1.7* 전에 /usr/java/jdk1.6* 바람직한 것을 보여준다 locate_java_home (). 이것은 나중에 빠른 VM을 고정 할 수있다, 그러나 나는 빨랐다 수정을 찾고 있었다. (그것은 우리가 dev에 대한 새로운 VM을 설정하기위한 몇 가지 노력이 필요합니다.)

    나는 단순히 파일의 검색 순서를 변경하여 내 VM을 고정 및 재부팅.

    HTH, 글렌

  3. from https://stackoverflow.com/questions/21176063/sqoop-and-java-7 by cc-by-sa and MIT license