我目前正在尝试在Java代码中启动Apache Hadoop作业。在我提出问题之前,我想提供一些有关我的代码和工作环境的信息。
由于我正在开发环境(Ubuntu 14.04,Eclipse Kepler,OpenJDK v7),我已经在独立模式下设置了Hadoop。详细地说,我只在.bashrc
文件中进行了以下更改:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HADOOP_INSTALL=/home/db2inst1/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin
因此,我得到的终端输出如下:
db2inst1@rethimno:~$ which hadoop
/home/db2inst1/hadoop/bin/hadoop
db2inst1@rethimno:~$ hadoop version
Hadoop 1.2.1
Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152
Compiled by mattf on Mon Jul 22 15:23:09 PDT 2013
From source with checksum 6923c86528809c4e7e6f493b6b413a9a
This command was run using /home/db2inst1/hadoop/hadoop-core-1.2.1.jar
db2inst1@rethimno:~$
转向我的Java代码(我在Eclipse IDE中调用)如下:
import java.io.IOException;
import java.lang.ProcessBuilder.Redirect;
public class ProcessSpanwer {
public static void main(String[] args) throws IOException, InterruptedException {
String[] command = {"hadoop", "version"};
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true);
processBuilder.redirectOutput(Redirect.INHERIT);
Process p = processBuilder.start();
p.waitFor();
}
}
您可以理解,上面的代码只是一些示例代码,用于测试我是否可以通过Java启动Hadoop作业。我从执行中收到的输出如下:
Exception in thread "main" java.io.IOException: Cannot run program "hadoop": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
at ProcessSpanwer.main(ProcessSpanwer.java:12)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
... 1 more
对我来说很明显,JVM无权访问环境变量$HADOOP_INSTALL
和更新的$PATH
变量。我已经通过Java代码打印出环境变量来验证。
因此,我的问题是我需要做什么才能:
感谢您的时间。
答案 0 :(得分:1)