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

Wes*_*key 0 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)
Run Code Online (Sandbox Code Playgroud)

资源管理器中作业的stderr日志文件包含以下消息:“ / bin / bash:/ bin / java:是目录”。

我本来收到类似的错误消息,“/斌/庆典:/斌/ java的:没有这样的文件或目录”,但修改了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
Run Code Online (Sandbox Code Playgroud)

我的$ JAVA_HOME变量设置为: /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home

这是我的JAVA_HOME变量的配置问题导致的吗?

Wes*_*key 5

通过在hadoop-env.sh中对JAVA_HOME变量进行硬编码来解决此问题(如对此问题的最高投票表决的答案中所指定)

改变了这个:

export JAVA_HOME=${JAVA_HOME}
Run Code Online (Sandbox Code Playgroud)

对此:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)