Hadoop MapReduce错误 - / bin / bash:/ bin / java:是一个目录

时间:2016-09-22 00:36:24

标签: hadoop mapreduce

我正在尝试在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变量配置问题的结果吗?

3 个答案:

答案 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”的工作方式(尽管在以后的版本中已修复)。