2017-01-21 3 views
0

Недавно я занимаюсь исследованиями на Apache Pig, и я пытаюсь создать Pig-Embedded Java Program. Я нашел и скопировал пример с веб-сайта (From https://acadgild.com/blog/embedding-pig-java/), и я пытаюсь скомпилировать его до запуска.Не удалось запустить Pig Embbeded Java Program в Ubuntu

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

В manpage для java указано, что путь к классам по умолчанию равен '.'. Но он не говорит, что '.' добавляется, если вы укажете путь к классам. Вы хотите включить текущий каталог, потому что это класс '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'. Я предполагаю, что другая часть пути класса неверна. Это похоже на путь Linux, но из-за ведущего '/' это абсолютный путь, который, вероятно, не тот, который вы хотели. Например. если вы находитесь в каталоге 'pigjar', который содержит' pig.jar', используйте '-cp pig.jar: .'; если вы находитесь в родительском каталоге 'pigjar', это' -cp pigjar/pig.jar: .' –

ответ

1

Путь к папкам неправильно В Linux, путь, начинающийся с / является абсолютным, то есть из корневого каталога я предполагаю, что вы имели в виду -cp pigjar/pig.jar Вы также забыли включить. текущий каталог ., который содержит ваш код, который автоматически включается в путь к классам, но только если у вас на самом деле нет аргумента -cp или CLASSPATH. Отсутствует ., что вызвало это сообщение об ошибке, но вам нужны оба изменения :

java -cp pigjar/pig.jar:. pig_embbed.pig_java 
Смежные вопросы