[HADOOP] 돼지 UDF java.lang.NoClassDefFoundError가 함께 AWS EMR에서 실행 : 조직 / 아파치 / 돼지 / LoadFunc을
HADOOP돼지 UDF java.lang.NoClassDefFoundError가 함께 AWS EMR에서 실행 : 조직 / 아파치 / 돼지 / LoadFunc을
나는 S3의 달러에 저장된 로그 파일을 읽고 탄성 맵리 듀스를 사용하여 분석을 시도하는 응용 프로그램을 개발하고있다. 현재 로그 파일 형식은 다음과
-------------------------------
COLOR=Black
Date=1349719200
PID=23898
Program=Java
EOE
-------------------------------
COLOR=White
Date=1349719234
PID=23828
Program=Python
EOE
그래서 난 내 돼지 스크립트로 파일을로드하려고하지만, 빌드 - 돼지 로더 내 데이터를로드 할 수있을 것 같습니다하지 않는, 그래서 난 내 자신의 UDF를 만들어야합니다. 나는 돼지와 하둡 꽤 새로운 오전 이후, 나는 얼마나 UDF 작품의 teast를 얻기 위해, 난 내 자신을 쓰기 전에 다른 사람에 의해 작성된 스크립트를 시도합니다. 나는 SimpleTextLoader가 여기에 http://pig.apache.org/docs/r0.10.0/udf.html에서 하나를 발견했다. 이 SimpleTextLoader를 컴파일하기 위해, 나는 같은 몇 가지의 수입을 추가해야
import java.io.IOException;
import java.util.ArrayList;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit;
import org.apache.pig.backend.executionengine.ExecException;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;
import org.apache.pig.data.DataByteArray;
import org.apache.pig.PigException;
import org.apache.pig.LoadFunc;
그 후, 나는이 파일을 컴파일 할 필요가 발견. 나는 SVN과 돼지 실행을 다운로드해야
sudo apt-get install subversion
svn co http://svn.apache.org/repos/asf/pig/trunk
ant
지금은 pig.jar 파일을 가지고, 나는이 파일을 컴파일하려고합니다.
javac -cp ./trunk/pig.jar SimpleTextLoader.java
jar -cf SimpleTextLoader.jar SimpleTextLoader.class
그것은 성공적으로 컴파일하고 난 사용하여 파일을로드하려고 돼지가 꿀꿀 거리는 소리에 불평 소리를 입력에 입력
grunt> register file:/home/hadoop/myudfs.jar
grunt> raw = LOAD 's3://mys3bucket/samplelogs/applog.log' USING myudfs.SimpleTextLoader('=') AS (key:chararray, value:chararray);
2012-12-05 00:08:26,737 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. org/apache/pig/LoadFunc Details at logfile: /home/hadoop/pig_1354666051892.log
pig_1354666051892.log 내부가있다
Pig Stack Trace
---------------
ERROR 2998: Unhandled internal error. org/apache/pig/LoadFunc
java.lang.NoClassDefFoundError: org/apache/pig/LoadFunc
또한 http://wiki.apache.org/pig/UDFManual에서 다른 UDF (UPPER.java)를 사용하려고, 난 여전히 UPPER 방법을 사용하는 시도하여 같은 오류가 발생하고있다. 당신이 나 좀 도와 주실 래요, 문제는 여기에 무엇입니까? 많은 감사합니다!
업데이트 : EMR이 /home/hadoop/lib/pig/pig.jar에서 빌드 - Pig.jar, 같은 문제를 얻을 시도했다.
해결법
-
==============================
1.은 / 가정 / 하둡 / lib 디렉토리 / 돼지 디렉토리에 UDF 항아리를 넣어 또는 복사 돼지 - * - lib 디렉토리 / 홈 / 하둡 /에 amzn.jar 파일과 작동합니다.
은 / 가정 / 하둡 / lib 디렉토리 / 돼지 디렉토리에 UDF 항아리를 넣어 또는 복사 돼지 - * - lib 디렉토리 / 홈 / 하둡 /에 amzn.jar 파일과 작동합니다.
당신은 아마 다음 중 하나를 수행하기 위해 부트 스트랩 동작을 사용합니다.
-
==============================
2.돼지와 하이브처럼 하둡 생태계 도구의 대부분은 환경 변수 $ HADOOP_HOME / conf의 / hadoop-env.sh를 찾아보십시오.
돼지와 하이브처럼 하둡 생태계 도구의 대부분은 환경 변수 $ HADOOP_HOME / conf의 / hadoop-env.sh를 찾아보십시오.
나는 돼지-0.13.0-h1.jar를 추가하여이 문제를 해결할 수 있었다 HADOOP_CLASSPATH에 (그것은 UDF에 필요한 모든 클래스를 포함) :
export HADOOP_CLASSPATH=/home/hadoop/pig-0.13.0/pig-0.13.0-h1.jar:$HADOOP_CLASSPATH
돼지-0.13.0-h1.jar는 돼지의 홈 디렉토리에서 사용할 수 있습니다.
from https://stackoverflow.com/questions/13714800/pig-udf-running-on-aws-emr-with-java-lang-noclassdeffounderror-org-apache-pig-l by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 돼지 라틴어 줄에 JSON 배열에 파일을로드하는 방법 (0) | 2019.10.07 |
---|---|
[HADOOP] 임시 HDFS 디렉토리에 대한 권한을 변경하는 방법 (0) | 2019.10.07 |
[HADOOP] 하둡 맵리 듀스는 NoSuchElementException (0) | 2019.10.07 |
[HADOOP] 디버깅 정보를 얻는 작업 중 오류가 오류로 종료 작업 = job_local644049657_0014, (0) | 2019.10.07 |
[HADOOP] 이유는 무엇입니까 단일 출력 파일에 하이브 결과에지도에만 작업 (0) | 2019.10.07 |