Ich versuche, ein grundlegendes MapReduce Programm auf macOS 10.12 auszuführen, die die maximale Temperatur aus einer Protokolldatei von Wetterdaten abruft. Wenn der Job ausgeführt, erhalte ich folgende Stack-Trace:Hadoop MapReduce Fehler -/ist/bash:/ist/java: ist ein Verzeichnis
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)
Die stderr Protokolldatei für den Job in der Ressource-Manager enthält die folgende Meldung: "/ bin/bash:/bin/java: ist ein Verzeichnis" .
Ich erhielt ursprünglich eine ähnliche Fehlermeldung, "/ bin/bash:/bin/java: Keine solche Datei oder Verzeichnis", aber das Skript hadoop-config.sh wie von der Antwort in this post vorgeschlagen geändert. Ich änderte es wie folgt:
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
My $ JAVA_HOME Variable gesetzt ist: /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
Ist das ein Ergebnis einer Konfigurationsproblem mit meiner JAVA_HOME Variable?