2017-01-21 9 views
0

최근 Apache Pig에 대한 연구를하고 돼지 내장형 Java 프로그램을 작성하려고합니다. 웹 사이트 (예 : https://acadgild.com/blog/embedding-pig-java/)에서 예제를 찾아서 복사하고 실행하기 전에 컴파일하려고합니다.Ubuntu에서 Pig Embeded Java 프로그램을 실행할 수 없습니다.

javac pig_java.java 

오류 메시지없이 컴파일이 완료되었습니다. 내가 https://wiki.apache.org/pig/EmbeddedPig의 지시 사항에 따라 다음과 같은 명령을 실행할 때 :

java -cp /pigjar/pig.jar pig_embbed.pig_java 

그것은 쇼 :

Error: Could not find or load main class pig_embbed.pig_java 

사람은 전에 이런 종류의 상황에 직면합니까? : '(

소스 코드 :..

package pig_embbed; 

import java.util.Properties; 
import org.apache.pig.ExecType; 
import org.apache.pig.PigServer; 

public class pig_java { 
    public static void main(String[] args) { 
     try { 
      PigServer pigServer = new PigServer(ExecType.MAPREDUCE); 
      runQuery(pigServer); 
      Properties props = new Properties(); 
      props.setProperty("fs.default.name", 
    "hdfs://<hdfs_url>:<hdfs_port>"); 
    }catch(Exception e) { 
     e.printStackTrace(); 
     } 
    } 

public static void runQuery(PigServer pigServer) { 
    try {   
     pigServer.registerQuery("input1 = LOAD '/user/centos7/EA/test.txt' as (line:chararray);");  
     pigServer.registerQuery("words = foreach input1 generate FLATTEN(TOKENIZE(line)) as word;");   
     pigServer.registerQuery("word_groups = group words by word;");  
     pigServer.registerQuery("word_count = foreach word_groups generate group, COUNT(words);");  
     pigServer.registerQuery("ordered_word_count = order word_count by group desc;");   
     pigServer.registerQuery("store ordered_word_count into '/user/EA/test_output';");   
    } catch(Exception e) {  
     e.printStackTrace();   
     }   
    } 
} 
+0

Java 용 맨 페이지에는 classpath의 기본값은'.'입니다. 그러나 classpath를 지정하면'.'이 추가된다고하지는 않습니다. 'main' 클래스가'java -cp /pigjar/pig.jar : '이기 때문에 현재 디렉토리를 포함하고 싶습니다. pig_embbed.pig_java'. –

+0

java -cp /pigjar/pig.jar :를 입력 한 후. pig_embbed.pig_java 표시 : 스레드 "main"의 예외 java.lang.NoClassDefFoundError : org/apache/pig/PigServer –

+0

'.'이 필요했던 것처럼 보이지만 이제는'pig_embbed'라는 또 다른 오류를 찾을 수 있습니다. 이 클래스는 org.apache.pig.PigServer' 클래스를 찾을 수 없다. 나는 classpath의 다른 부분이 잘못되었다고 생각한다. 리눅스 경로와 비슷하지만,'/'로 인해/usr 경로가 절대 경로가 아니기 때문에 원하는 경로가 아닙니다. 예 : 'pig.jar'가 들어있는'pigjar' 디렉토리에 있다면'-cp pig.jar : .'를 사용하십시오; 만약 당신이'pigjar'의 부모 디렉토리에 있다면'-cp pigjar/pig.jar : .' –

답변

1

클래스 경로가 잘못 리눅스에서 /로 시작하는 경로가 루트 디렉토리에서 즉, 절대 난 당신이 -cp pigjar/pig.jar을 의미 가정 또한 포함 잊어 버렸습니다. 현재 디렉토리 .에 코드가 포함되어 있는데이 코드는 클래스 경로에 자동으로 포함되지만 실제로는 -cp 인수 또는 CLASSPATH 환경 변수가없는 경우에만 표시됩니다. 누락 된 .은이 오류 메시지의 원인이지만 두 가지 변경 사항이 필요합니다 :

java -cp pigjar/pig.jar:. pig_embbed.pig_java