Shell脚本没有从Java代码运行R(Rhipe)程序

时间:2012-02-19 07:48:36

标签: java r shell unix

我有一个简单的shell脚本,如下所示:

R --vanilla<myMRjob.R
hadoop fs -get /output_03/ /home/user/Desktop/hdfs_output/

此shell脚本运行myMRjob.R,并将hdfs的输出获取到本地文件系统。它从终端执行良好。

当我尝试从java代码运行shell脚本时,我无法启动MapReduce作业,即第一行未执行。虽然“hadoop fs -get ..”行通过Java代码正常运行。

我使用的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的结果。

请帮忙!

1 个答案:

答案 0 :(得分:0)

你的shell脚本没有从exec调用运行的原因是因为shell脚本实际上只是文本文件而且它们不是本机可执行文件。 shell(Bash)知道如何解释它们。 exec调用期望找到本机可执行二进制文件。

调整你的Java,以便调用shell并让它运行你的脚本:

proc = Runtime.getRuntime().exec("/bin/bash Recomm.sh", null, wd);

当您直接从Java调用hadoop时,它是一个本机可执行文件,这就是它工作的原因。