2016-09-22 3 views
0

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?

Antwort

1

Dies wurde durch Hartcodierung der Variable JAVA_HOME in hadoop-env.sh aufgelöst (wie in der höchsten gestimmten Antwort auf this question angegeben)

dies geändert:

export JAVA_HOME=${JAVA_HOME} 

Um dies:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home 
0

hatte ich meine eigene Begegnung mit diesem Thema und wollte in meiner eigenen Erfahrung werfen. In meinem Fall bekam ich /bin/bash: /bin/java: No such file or directory, wenn ich versuchte, das Beispiel auf der Apache-Website auszuführen.

Ich dachte, einen guten Platz zu Beginn der Suche, wie dieses Problem zu beheben wäre all Dateien zu durchschauen, um zu sehen, wo das Problem werden könnte beschneiden. grep -r '/bin/java' ./*

Zusätzlich zu den verschiedenen Erklärungen von JAVA=$JAVA_HOME/bin/java, sah ich _RUNJAVA=$JRE_ENV/bin/java in $ HADOOP_CONF_DIR/share/hadoop/httpfs/tomcat/bin/setclasspath.sh. Ich hatte diese Umgebungsvariable nicht eingestellt, also habe ich einfach den Faden gestoppt, ihn auf $JAVA_HOME gesetzt und es wieder gestartet.