[英]Shell script not running R (Rhipe) program from Java code
我有一個簡單的shell腳本,如下所示:
R --vanilla<myMRjob.R
hadoop fs -get /output_03/ /home/user/Desktop/hdfs_output/
此Shell腳本運行myMRjob.R,並將輸出從hdfs獲取到本地文件系統。 它可以從終端執行。
當我嘗試從Java代碼運行Shell腳本時,無法啟動MapReduce作業,即第一行未執行。 通過Java代碼,“ hadoop fs -get ..”行運行正常。
我使用的Java代碼是:
import java.io.*;
public class Dtry {
public static void main(String[] args) {
File wd = new File("/home/dipesh/");
System.out.println("Working Directory: " +wd);
Process proc = null;
try {
proc = Runtime.getRuntime().exec("./Recomm.sh", null, wd);
} catch (Exception e) {
e.printStackTrace();
}
}
}
整個練習背后的原因是,我想在JSP中觸發並顯示myMRjob.R的結果。
請幫忙!
無法從exec調用運行shell腳本的原因是因為shell腳本實際上只是文本文件,並且不是本機可執行文件。 外殼(Bash)知道如何解釋它們。 exec調用期望找到本機可執行二進制文件。
像這樣調整Java,以調用Shell並使其運行腳本:
proc = Runtime.getRuntime().exec("/bin/bash Recomm.sh", null, wd);
當您直接從Java調用hadoop時,它是一個本機可執行文件,這就是它起作用的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.