我正在尝试在macOS 10.12上运行一个基本的MapReduce程序,该程序从天气数据的日志文件中检索最高温度。运行作业时,我收到以下堆栈跟踪:
Stack trace: ExitCodeException exitCode=126:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:582)
at org.apache.hadoop.util.Shell.run(Shell.java:479)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:773)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:212)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
资源管理器中作业的stderr日志文件包含以下消息:“/ bin / bash:/ bin / java:是一个目录”。
我最初收到类似的错误消息,“/ bin / bash:/ bin / java:没有这样的文件或目录”,但修改了this post中答案建议的hadoop-config.sh脚本。我修改如下:
if [[ -z $JAVA_HOME ]]; then
# On OSX use java_home (or /Library for older versions)
if [ "Darwin" == "$(uname -s)" ]; then
if [ -x /usr/libexec/java_home ]; then
export JAVA_HOME=${JAVA_HOME}
else
export JAVA_HOME=${JAVA_HOME}
fi
fi
我的$ JAVA_HOME变量设置为:/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
这是我的JAVA_HOME变量配置问题的结果吗?
答案 0 :(得分:5)
这是通过在hadoop-env.sh中对JAVA_HOME变量进行硬编码来解决的(在this question的最高投票答案中指定)
改变了这个:
export JAVA_HOME=${JAVA_HOME}
对此:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
答案 1 :(得分:0)
我有自己的磨合问题,想要投入自己的经验。就我而言,在尝试运行Apache网站上的详细示例时,我得到了/bin/bash: /bin/java: No such file or directory
。
我认为一个好的地方开始寻找如何解决这个问题将是查看所有文件,看看问题可能出现在哪里。 grep -r '/bin/java' ./*
除JAVA=$JAVA_HOME/bin/java
的各种声明外,我在 $ HADOOP_CONF_DIR / share / hadoop / httpfs / tomcat / bin / setclasspath.sh 中看到_RUNJAVA=$JRE_ENV/bin/java
。我没有设置此环境变量,因此我只是停止了纱线,将其设置为等于$JAVA_HOME
,然后重新启动它。
答案 2 :(得分:0)
或者您可以尝试使用此comment中显示的命令序列:
hdfs namenode -format;
start-dfs.sh;
yarn-daemon.sh start resourcemanager;
yarn-daemon.sh start nodemanager;
您不应在伪分布式模式下通过“ start-yarn.sh”启动YARN。问题在于“ start-yarn.sh”的工作方式(尽管在以后的版本中已修复)。