[英]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.println
和output.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.