gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:28:52 26 4
gpt4 key购买 nike

我有一个简单的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com