簡體   English   中英

Shell腳本未從Java代碼運行R(Rhipe)程序

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

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