2015-01-04 5 views
1

저는 PIG 초급자입니다.돼지 오류 : 메인 클래스 org.apache.pig.Main을 찾거나로드 할 수 없습니다.

파일의 단어를 대문자로 변환하는 WIKI 다음에 프로그램을 작성했습니다.

UPPER.java

--cat
package com.bigdata.myUdf; 

import java.io.IOException; 
import org.apache.pig.EvalFunc; 
import org.apache.pig.data.Tuple; 
import org.apache.pig.impl.util.WrappedIOException; 

public class UPPER extends EvalFunc<String> { 

public String exec(Tuple input) throws IOException { 
    if (input == null || input.size() == 0) 
    return null; 
    try{ 
    String str = (String)input.get(0); 
    return str.toUpperCase(); 
    }catch(Exception e){ 
    throw WrappedIOException.wrap("Caught exception processing input row ", e); 
    } 
    } 

} 

- 고양이 /home/hduser/lab/mydata/myscript.pig

REGISTER /home/hduser/software/myUdfs/UPPER.jar 
std_det = LOAD '/pigdata/udf1.txt' USING PigStorage(',') as (name:chararray); 
B = FOREACH std_det GENERATE com.bigdata.myUdf.UPPER(name); 
dump B; 

하지만 난 내가 오류를 얻고 그것을 실행할 때. /home/hduser/lab/mydata/myscript.pig

의 JAR :

java -cp com.bigdata.myUdf.UPPER.jar org.apache.pig.Main -x local /home/hduser/lab/mydata/myscript.pig 

ERROR

Error: Could not find or load main class org.apache.pig.Main 

고양이

export PIG_INSTALL=/home/hduser/software/pig 
export PATH="${PATH}:${PIG_INSTALL}/bin" 
export PIG_CLASSPATH=$HADOOP_CONF_DIR:${PIG_INSTALL}:. 
export CLASSPATH=.:${PIG_CLASSPATH} 

돼지 스크립트에있다 .bashrc에 파일은 다음 위치에 있습니다. /home/hduser/software/myUdfs/UPPER.jar

내가 뭘 잘못하고 있는지 이해하도록 도와주세요. 미리 감사드립니다. Shivashakti의 지시를 따른 후. 프로그램이 실행되었지만 출력을 제공하지 않았습니다.

pig -x local myScript.pig 

15/01/05 04:47:57 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL 
15/01/05 04:47:57 INFO pig.ExecTypeProvider: Picked LOCAL as the ExecType 
2015-01-05 04:47:57,920 [main] INFO org.apache.pig.Main - Apache Pig version 0.14.0 (r1640057) compiled Nov 16 2014, 18:02:05 
2015-01-05 04:47:57,921 [main] INFO org.apache.pig.Main - Logging error messages to:  /home/hduser/lab/piglog/pig_1420462077918.log 
2015-01-05 04:47:57,959 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - user.name is deprecated. Instead, use mapreduce.job.user.name 
2015-01-05 04:47:58,314 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS 
2015-01-05 04:47:58,315 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address 
2015-01-05 04:47:58,318 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:/// 
2015-01-05 04:47:58,463 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS 
2015-01-05 04:47:59,070 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS 
2015-01-05 04:47:59,227 [main] INFO org.apache.pig.Main - Pig script completed in 2 seconds and 505 milliseconds (2505 ms) 
+0

자바 -cp 내가 추측 필요하지 않습니다. java에 내장 된 돼지를 실행하지 않고 대신 UDF를 실행해야합니다. pig -x local file.pig를 시도하십시오 –

답변

2

다음 단계를 수행 할 수 있습니까? 아래의 링크 (돼지 0.11.1.jar, 하둡 - 공통 0.21.0.jar 및 piggybank.jar)

http://www.java2s.com/Code/Jar/p/Downloadpig0111jar.htm 
http://www.java2s.com/Code/Jar/h/Downloadhadoopcommon0210jar.htm 
http://www.java2s.com/Code/Jar/p/Downloadpiggybankjar.htm 

2.에서

1.Download 3 jar 파일 클래스 경로에 위의 모든 3 개 jar 파일

현재 디렉토리

0123을에서 디렉토리 이름 "COM/bigdata/MYUDF /"를 만들기
export CLASSPATH=/tmp/pig-0.11.1.jar:/tmp/hadoop-common-0.21.0.jar:/tmp/piggybank.jar 

(3)

>>mkdir -p com/bigdata/myUdf/ 

4. 컴파일 UPPER.java 파일과 JAVA_HOME이 제대로 설정되었는지 확인하고 또한 파일을 클래스 패스에 포함 된 모든 위의 세 항아리 그렇지 않으면 컴파일 문제

>>javac UPPER.java 

5 올 것이다. 컴파일 된 UPPER를 이동하십시오.에 클래스 파일 "COM/bigdata/MYUDF /"폴더

>>mv UPPER.class com/bigdata/myUdf/ 

6. jar 파일 이름을 생성 UPPER.jar

>>jar -cvf UPPER.jar com/ 

7. 이제 UPPER.jar을에 포함하여 위의 명령을 실행하면 돼지 스크립트 실행 아래의 명령은

>>pig -x local myscript.pig 

당신은 실제 OU를 얻을 것이다 tput.


입력

hello 
world 

myscript.pig

REGISTER UPPER.jar; 
std_det = LOAD 'input' USING PigStorage(',') as (name:chararray); 
B = FOREACH std_det GENERATE com.bigdata.myUdf.UPPER(name); 
dump B; 

출력 :

01,235,

샘플 명령 :

$ ls 
UPPER.java  input myscript.pig 

$ mkdir -p com/bigdata/myUdf/ 
$ javac UPPER.java 
$ mv UPPER.class com/bigdata/myUdf/ 
$ jar -cvf UPPER.jar com/ 
$ pig -x local myscript.pig 
+0

안녕 Sivasakthi, 시간 내 주셔서 감사합니다. 이제 프로그램은 항아리를 놓치지 않는다고 불평하지는 않지만 ... 어떤 유효한 출력도 제공하지 않습니다. 위에 출력을 게시했습니다. – May

+0

죄송합니다. 돼지 스크립트에서 덤프를 잊어 버렸습니다. 지금은 잘 작동합니다. 모든 도움에 감사드립니다. – May

0

오류는 아파치 jar가 클래스 경로에 없음을 나타냅니다. -cp com.bigdata.myUdf.UPPER.jar에는 필요한 항아리가 포함되어 있지 않습니다. 'UPPER.jar'만 포함됩니다. 클래스 패스에 필요한 모든 병을 올바르게 포함시키는 법을 배울 수 있습니다. here

P. 나는 명령 행에서 돼지 명령을 사용하는 대신 자신의 방식대로 실행해야한다고 생각한다. 그러나 나는 그것을 단지 추측으로 사용하지 않았다.

+0

감사합니다. – May

관련 문제