要运行hadoop程序,使用的命令是
hadoop/bin/hadoop jar hadoop/Anagram.jar com.hadoop.examples.anagrams.AnagramJob /user/hadoop-user/testdir /user/hadoop-user/outputdir
来自PWD。 p>
我需要从APACHE TOMCAT 7.0中托管的JSP页面运行此命令。 在JSP中运行linux命令。
out.println(Runtime.getRuntime().exec("mkdir /tmp/testdirectory"));
工作正常。但我需要运行这个hadoop命令。
参考this question,我这样做了
<%
try{
out.println(Runtime.getRuntime().exec("start-all.sh"));
ProcessBuilder pb = new ProcessBuilder("hadoop jar hadoop/Anagram.jar com.hadoop.examples.anagrams.AnagramJob /user/hadoop-user/testdir /user/hadoop-user/outputdir5677");
pb.directory(new File("/home/hadoop-user/hadoop/bin/"));
Process p = pb.start();
}
catch(Exception e)
{ out.println("Error"+e);
}
%>
但它正在抛出异常
java.lang.UNIXProcess@5a8a7e Errorjava.io.IOException:无法运行 程序&#34; hadoop jar hadoop / Anagram.jar com.hadoop.examples.anagrams.AnagramJob / user / hadoop-user / testdir /用户/ Hadoop的用户/ outputdir5677&#34; (在目录中 &#34; / home / hadoop-user / hadoop / bin&#34;):java.io.IOException:error = 2,没有这样的 文件或目录
当我这样使用的时候 我该如何解决我的问题。我需要运行这个命令。但这个问题与路径有关。 :( 任何帮助将不胜感激!!
答案 0 :(得分:1)
尝试:./hadoop jar hadoop/Anagram.jar ...
使用的PATH可能不包含“。”或当前目录。
这将使其搜索您所在的bin目录。
答案 1 :(得分:0)
ProcessBuilder采用逗号分隔的参数,而不是像post中那样的整个命令。搜索ProcessBuilder示例