복붙노트

[HADOOP] 데이터로드 중 돼지 오류

HADOOP

데이터로드 중 돼지 오류

나는 우분투 12.02 32 비트를 사용하고 hadoop2.2.0과 돼지 0.12를 성공적으로 설치했다. Hadoop이 내 시스템에서 제대로 실행됩니다.

그러나이 명령을 실행할 때마다 :

data = load 'atoz.csv' using PigStorage(',')  as (aa1:int, bb1:int, cc1:int, dd1:chararray);            
dump data;

다음과 같은 오류가 발생합니다.

ERROR org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl - Error whiletrying to run jobs.java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected.

다음은 전체 스택 추적입니다.

> 2014-01-23 10:41:44,998 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher- 1 map-reduce job(s) waiting for submission.
>             2014-01-23 10:41:45,000 [Thread-9] INFO  org.apache.hadoop.metrics.jvm.JvmMetrics - Cannot initialize JVM
> Metrics with processName=JobTracker, sessionId= - already initialized
>             2014-01-23 10:41:45,001 [Thread-9] ERROR org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl - Error while
> trying to run jobs.
>             java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat.setupUdfEnvAndStores(PigOutputFormat.java:225)
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat.checkOutputSpecs(PigOutputFormat.java:186)
>             at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:456)
>             at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:342)
>             at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268)
>             at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265)
>             at java.security.AccessController.doPrivileged(Native Method)
>             at javax.security.auth.Subject.doAs(Subject.java:415)
>             at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
>             at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265)
>             at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:335)
>             at org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl.run(JobControl.java:240)
>             at java.lang.Thread.run(Thread.java:724)
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:260)
>             2014-01-23 10:41:45,498 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher
> - 0% complete
>             2014-01-23 10:41:45,502 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher
> - job null has failed! Stop running all dependent jobs
>             2014-01-23 10:41:45,503 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher
> - 100% complete
>             2014-01-23 10:41:45,507 [main] ERROR org.apache.pig.tools.pigstats.SimplePigStats - ERROR 2997: Unable to
> recreate exception from backend error: Unexpected System Error
> Occured: java.lang.IncompatibleClassChangeError: Found interface
> org.apache.hadoop.mapreduce.JobContext, but class was expected
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat.setupUdfEnvAndStores(PigOutputFormat.java:225)
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat.checkOutputSpecs(PigOutputFormat.java:186)
>             at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:456)
>             at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:342)
>             at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268)
>             at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265)
>             at java.security.AccessController.doPrivileged(Native Method)
>             at javax.security.auth.Subject.doAs(Subject.java:415)
>             at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
>             at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265)
>             at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:335)
>             at org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl.run(JobControl.java:240)
>             at java.lang.Thread.run(Thread.java:724)
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:260)
2014-01-23 10:41:45,507 [main] ERROR org.apache.pig.tools.pigstats.PigStatsUtil - 1 map reduce job(s)
> failed!
>             2014-01-23 10:41:45,507 [main] INFO  org.apache.pig.tools.pigstats.SimplePigStats - Detected Local mode.
> Stats reported below may be incomplete
>             2014-01-23 10:41:45,508 [main] INFO  org.apache.pig.tools.pigstats.SimplePigStats - Script Statistics:
HadoopVersion    PigVersion    UserId    StartedAt    FinishedAt    Features
>             2.2.0    0.10.1    hardik    2014-01-23 10:41:44    2014-01-23 10:41:45    UNKNOWN
 Failed!
Failed Jobs:
JobId    Alias    Feature    Message    Outputs
N/A    aatoz    MAP_ONLY    Message: Unexpected System Error Occured: java.lang.IncompatibleClassChangeError: Found interface
> org.apache.hadoop.mapreduce.JobContext, but class was expected
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat.setupUdfEnvAndStores(PigOutputFormat.java:225)
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat.checkOutputSpecs(PigOutputFormat.java:186)
>             at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:456)
>             at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:342)
>             at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268)
>             at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265)
>             at java.security.AccessController.doPrivileged(Native Method)
>             at javax.security.auth.Subject.doAs(Subject.java:415)
>             at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
>             at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265)
>             at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:335)
>             at org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl.run(JobControl.java:240)
>             at java.lang.Thread.run(Thread.java:724)
>             at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:260)
>             file:/tmp/temp1979716161/tmp-189979005,
Input(s):
Failed to read data from "file:///home/hardik/pig10/bin/input/atoz.csv"
Output(s):
             Failed to produce result in "file:/tmp/temp1979716161/tmp-189979005"
Job DAG:
null
2014-01-23 10:41:45,509 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher
 Failed! 2014-01-23 10:41:45,510 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator
> for alias aatoz
>             Details at logfile: /home/hardik/pig10/bin/pig_1390453192689.log
>     </i>

해결법

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

    1.Apache Pig 0.12.0은 기본적으로 Hadoop의 이전 버전을 기대합니다. Hadoop 2.2.0 용 Pig를 다시 컴파일하고 두 개의 jar를 새로운 pig-0.12.1-SNAPSHOT.jar 및 pig-0.12.1-SNAPSHOT-withouthadoop.jar로 바꿔야합니다.

    Apache Pig 0.12.0은 기본적으로 Hadoop의 이전 버전을 기대합니다. Hadoop 2.2.0 용 Pig를 다시 컴파일하고 두 개의 jar를 새로운 pig-0.12.1-SNAPSHOT.jar 및 pig-0.12.1-SNAPSHOT-withouthadoop.jar로 바꿔야합니다.

    다시 컴파일하려면 돼지 아카이브를 풀고 "pig-0.12.0"디렉토리로 이동하여 다음을 실행하십시오.

    ant clean jar-all -Dhadoopversion=23
    
  2. ==============================

    2."ant clean jar-all -Dhadoopversion = 23"명령을 사용하여 빌드하면 프로젝트에서 종속성을 사용하는 것으로 충분하지 않습니다. 로컬 maven repo에 생성 된 jar를 설치하거나 pom.xml에이 종속성 (hadoop2에 대한 "classifier"태그가 있음)을 사용해야합니다.

    "ant clean jar-all -Dhadoopversion = 23"명령을 사용하여 빌드하면 프로젝트에서 종속성을 사용하는 것으로 충분하지 않습니다. 로컬 maven repo에 생성 된 jar를 설치하거나 pom.xml에이 종속성 (hadoop2에 대한 "classifier"태그가 있음)을 사용해야합니다.

    <dependency>
    <groupId>org.apache.pig</groupId>
    <artifactId>pig</artifactId>
    <classifier>h2</classifier>
    <version>0.13.0</version>
    </dependency>
    
  3. ==============================

    3.나는 다른 방식으로 그것을 해결했다. 내 돼지 스크립트가 Maven을 사용하여 컴파일 된 내 Java 프로젝트에서 UDF를 호출 할 때 CDH4.4 & Pig 0.11.0에서 같은 문제가 발생합니다. /usr/lib/pig/conf/build.properties 파일을 방문했습니다. hadoop-core, hadoop-common, hadoop-mapreduce 속성에 대해 언급 된 버전을 확인했습니다. 동일한 버전의 모든 이슈가 내 Java 프로젝트의 POM.xml 파일에 종속성으로 포함되었는지 확인하십시오. (Infact hadoop-mapreduce는 http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/4.2.0/CDH4-Installation-Guide/cdh4ig_topic_31.html에 따라 6 개의 이슈 ID를 가지고 있습니다. 의존리스트에 그것들 모두 포함). 이러한 POM 설정을 사용하여 프로젝트의 jar 파일을 빌드 한 후 돼지 스크립트는 아무 문제없이 UDF를 호출 할 수있었습니다.

    나는 다른 방식으로 그것을 해결했다. 내 돼지 스크립트가 Maven을 사용하여 컴파일 된 내 Java 프로젝트에서 UDF를 호출 할 때 CDH4.4 & Pig 0.11.0에서 같은 문제가 발생합니다. /usr/lib/pig/conf/build.properties 파일을 방문했습니다. hadoop-core, hadoop-common, hadoop-mapreduce 속성에 대해 언급 된 버전을 확인했습니다. 동일한 버전의 모든 이슈가 내 Java 프로젝트의 POM.xml 파일에 종속성으로 포함되었는지 확인하십시오. (Infact hadoop-mapreduce는 http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/4.2.0/CDH4-Installation-Guide/cdh4ig_topic_31.html에 따라 6 개의 이슈 ID를 가지고 있습니다. 의존리스트에 그것들 모두 포함). 이러한 POM 설정을 사용하여 프로젝트의 jar 파일을 빌드 한 후 돼지 스크립트는 아무 문제없이 UDF를 호출 할 수있었습니다.

  4. ==============================

    4.이것은 당신의 단서입니다. 오류 org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl - 작업을 실행하는 동안 오류가 발생했습니다. java.lang.IncompatibleClassChangeError : 인터페이스 org.apache.hadoop.mapreduce.JobContext를 찾았지만 클래스가 필요합니다. "jobcontrol"인터페이스가 특정 클래스를 찾고 있는데 찾지 못했습니다.

    이것은 당신의 단서입니다. 오류 org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl - 작업을 실행하는 동안 오류가 발생했습니다. java.lang.IncompatibleClassChangeError : 인터페이스 org.apache.hadoop.mapreduce.JobContext를 찾았지만 클래스가 필요합니다. "jobcontrol"인터페이스가 특정 클래스를 찾고 있는데 찾지 못했습니다.

  5. ==============================

    5.Hadoop 2x에서 내 UDF로 스크립트를 실행하려고하면 같은 예외가 발생했습니다.

    Hadoop 2x에서 내 UDF로 스크립트를 실행하려고하면 같은 예외가 발생했습니다.

    최신 릴리스 0.14 및 현재 트렁크 0.15에서 ant target jar-all이 누락되었습니다. 따라서 소스를 기반으로 구축하는 경우

    또는

    ant jar -Dhadoopversion=23
    

    Maven Central에서 호환되는 버전을 다운로드하기 만하면됩니다.

    제 경우에는 pig-0.14.0-h2.jar이었습니다.

  6. ==============================

    6.이 문제는 2.2 이상의 모든 hadoop 버전에서도 발생합니다. 더 쉬운 방법은 돼지 버전 0.15를 설치하는 것입니다. 그들은이 버전에서이 문제를 해결했습니다.

    이 문제는 2.2 이상의 모든 hadoop 버전에서도 발생합니다. 더 쉬운 방법은 돼지 버전 0.15를 설치하는 것입니다. 그들은이 버전에서이 문제를 해결했습니다.

  7. from https://stackoverflow.com/questions/21300612/error-in-pig-while-loading-data by cc-by-sa and MIT license