java - Shell 脚本未从 Java 代码运行 R (Rhipe) 程序

标签 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 的结果。

请帮忙!

最佳答案

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

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

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

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

关于java - Shell 脚本未从 Java 代码运行 R (Rhipe) 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9347602/

相关文章:

java - 如何区分从 HTML 表单提交的 HTTP 请求和从客户端提交的 HTTP 请求?

r - 在ggplot2中结合连续和离散色标吗?

bash - 如何以非交互方式运行 "sudo passwd username"

java - Tomcat、HTTP Keep-Alive 和 Java 的 HttpsUrlConnection

java - 为什么只抽出一个球?应该还有很多

java - 使用 Rest Template 从外部 api 返回特定数据

r - Tidyeval:如何在没有用户引用的情况下将带有引用元素的列表传递给嵌套函数?

r - 为什么 R 需要数据框的名称?

linux - shell脚本获取列数据

c - 将参数从shell脚本传递到c程序