簡體   English   中英

使用JAVA和UNIX運行Pig命令

[英]Running Pig command using JAVA and UNIX

我正在嘗試通過JAVA運行UNIX命令。 我的shell命令調用了一個pig腳本。當我在unix終端中執行此操作時,它工作正常,但是通過java我沒有得到任何輸出。

PFB代碼JAVA:

public String executeCommand(String command) {

    StringBuffer output = new StringBuffer();

    Process p;
    try {
        System.out.println("process started");
        p = Runtime.getRuntime().exec(command);
        //p.waitFor();
        System.out.println("before reader");
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

        //String line = "";         
        System.out.println("After reader   ");
        while (reader.readLine() != null) {
            System.out.println("inside while loop *******************************");
            output.append(reader.readLine() + "\n");
            System.out.println(reader.readLine());
        }
        System.out.println("while loop endedr");
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("inside exception");
    }
    return output.toString();
} 

pig_command:time pig -param indir =“ / home / ******** / INDIR / archived / Bookings / 20160620 * / part *” -param outdir =“ / home / ********* / OUTDIR / HOURLYBOOKING / 20160620/05“ -stop_on_failure -x mapreduce /home/directory/pig/pigscript.pig

我如何運行Java程序:java -cp /home/directory/java_jar.jar com.Example.Tester pig_command

問題:盡管在HDFS中成功生成了輸出,但上述while循環中的代碼未打印任何內容(應打印作業日志)。

readline()每次調用都會轉到流中的下一行。 while代碼中的while循環在每個readline()調用中省略了兩行( System.out.printlnoutput.append... ),因此,如果您的Pig腳本的輸出僅為一兩行,則在控制台或從while循環附加到StringBuffer( output )上。

要解決此問題,您的實現

        //String line = "";         
        System.out.println("After reader   ");
        while (reader.readLine() != null) {
            System.out.println("inside while loop *******************************");
            output.append(reader.readLine() + "\n");
            System.out.println(reader.readLine());
        }

應該:

        String line = null;         
        System.out.println("After reader   ");
        while ((line = reader.readLine()) != null) {
            //System.out.println("inside while loop *******************************");
            output.append(line + "\n");
            System.out.println(line);
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM