it-swarm.com.de

Arbeiten mit Hadoop: localhost: Fehler: Java_HOME ist nicht festgelegt

Ich arbeite mit Ubuntu 12.04 LTS. 

Ich gehe das hadoop-Schnellstarthandbuch durch, um eine pseudo-verteilte Operation durchzuführen. Es scheint einfach und unkompliziert (einfach!). 

Wenn ich jedoch versuche, start-all.sh auszuführen, bekomme ich:

localhost: Error: Java_HOME is not set.

Ich habe alle anderen Ratschläge zu stackoverflow für dieses Problem gelesen und habe Folgendes getan, um sicherzustellen, dass Java_HOME gesetzt ist:

In /etc/hadoop/conf/hadoop-env.sh habe ich eingestellt

Java_HOME=/usr/lib/jvm/Java-6-Oracle
export Java_HOME

In /etc/bash.bashrc habe ich eingestellt

Java_HOME=/usr/lib/jvm/Java-6-Oracle
export Java_HOME
PATH=$PATH:$Java_HOME/bin
export PATH

which Java gibt zurück:

/usr/bin/Java

Java –version funktioniert

echo $Java_HOME gibt zurück:

/usr/lib/jvm/Java-6-Oracle

Ich habe sogar versucht, root zu werden und explizit das Terminal zu schreiben:

$ Java_HOME=/usr/lib/jvm/Java-6-Oracle
$ export Java_HOME
$ start-all.sh

Wenn Sie mir zeigen könnten, wie Sie diesen Fehler beheben können, wäre ich sehr dankbar. Ich denke, mein Java_HOME wird irgendwie außer Kraft gesetzt. Könnten Sie mir dann erklären, wie ich meine Exporte global gestalten kann?

23
Ali Ismail

Ich benutze hadoop 1.1 und hatte das gleiche Problem.

Ich habe es gelöst, indem ich Java_HOME variabel in /etc/hadoop/hadoop-env.sh geändert habe:

export Java_HOME=/usr/lib/jvm/<jdk folder>
53
Krishna

Um dieses Problem zu lösen, exportieren Sie die Java_HOME-Variable in die Datei conf/hadoop-env.sh.

Es ist egal, ob Sie diese Variable bereits in ~/.bashrc exportiert haben, der Fehler wird trotzdem angezeigt.

Edit conf/hadoop-env.sh und kommentieren Sie die Zeile "export Java_HOME" aus und fügen Sie einen richtigen Dateisystempfad hinzu, d. H. Den Pfad zu Ihrem Java JDK.

# Die zu verwendende Java-Implementierung. Erforderlich.
Export Java_HOME = "/ Pfad/nach/Java/JDK /" 

18
bitek

auszug aus etc/hadoop/hadoop-env.sh

Die einzige erforderliche Umgebungsvariable ist Java_HOME. Alle anderen sind wahlweise. Wenn Sie eine verteilte Konfiguration ausführen, empfiehlt es sich, Legen Sie Java_HOME in dieser Datei fest, damit es auf Remote-Knoten korrekt definiert ist.

Dies bedeutet, es ist besser und empfehlenswert, Java_HOME hier festzulegen, obwohl die vorhandene Definition die Java_HOME-Variable liest. Vielleicht bekommt der Wert von Java_HOME nicht den zuvor eingestellten Wert ... Das Standard-Apache-Handbuch sagt dies nicht :( :(

1

Die gleiche Ausgabe auf Ubuntu LTS 16.04. Beim Ausführen von bash -vx ./bin/hadoop wurde getestet, ob Java ein Verzeichnis ist. Also habe ich Java_HOME in einen Ordner geändert und es hat funktioniert.

++ [[ ! -d /usr/bin/Java ]]
++ hadoop_error 'ERROR: Java_HOME /usr/bin/Java does not exist.'
++ echo 'ERROR: Java_HOME /usr/bin/Java does not exist.'
ERROR: Java_HOME /usr/bin/Java does not exist.

Also habe ich Java_HOME in ./etc/hadoop/hadoop-env.sh in geändert

export Java_HOME=/usr/lib/jvm/Java-8-Oracle/jre/

und hadoop fängt gut an. Dies wird auch in diesem Artikel erwähnt.

1
kometen

Um dies zu debuggen, setzen Sie ein "echo $ Java_HOME" in start-all.sh. Laufen Sie Ihre hadoop-Umgebung unter einem anderen Benutzernamen oder als Sie selbst? Im ersten Fall ist es sehr wahrscheinlich, dass die Java_HOME-Umgebungsvariable für diesen Benutzer nicht festgelegt ist.

Das andere mögliche Problem besteht darin, dass Sie Java_HOME falsch angegeben haben und der von Ihnen angegebene Wert nicht auf ein JDK/JRE verweist. Beachten Sie, dass "welche Java" und "Java-Version" beide funktionieren, auch wenn Java_HOME falsch eingestellt ist.

1
Paul Sanwald

unabhängig von debian oder einer beliebigen Linux-Variante, wissen Sie einfach, dass ~/.bash_profile zu einem bestimmten Benutzer gehört und nicht systemweit ist. in pseudo-verteilter Umgebung arbeitete hadoop mit localhost, sodass der $Java_HOME in .bash_profile nicht mehr verwendet wird.

exportieren Sie einfach Java_HOME in ~/.bashrc und verwenden Sie es systemweit.

1
Mr. Crowley

Ich war auch in hadoop 1.1 .__ mit dem ähnlichen Problem konfrontiert. Ich hatte nicht bemerkt, dass Java_HOME kommentiert wurde in: hadoop/conf/hadoop-env.sh

Es war 

/#Java_HOME=/usr/lib/jvm/Java-6-Oracle

Musste es zu ändern 

Java_HOME=/usr/lib/jvm/Java-6-Oracle
1
codeguru

Dieser Fehler kommt von Zeile 180

if [[ -z $Java_HOME ]]; then
   echo "Error: Java_HOME is not set and could not be found." 1>&2
   exit 1
fi

in libexec/hadoop-config.sh.

Versuchen Sie in diesem Skript echo $Java_HOME. Wenn es nicht erkennt,

Finden Sie Ihren Java_HOME Mit diesem Befehl:

$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

und tauschen Sie die Leitung aus

export Java_HOME=${Java_HOME} In /etc/hadoop/hadoop-env.sh Mit Java_HOME haben Sie vom obigen Befehl bekommen.

1
whitewalker
echo "export Java_HOME=/usr/lib/Java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

Hinweis: Verwenden Sie nicht export Java_HOME=${Java_HOME}!

0
JsonBruce

Java_HOME-Variable in conf/hadoop-env.sh ändern

export Java_HOME=/etc/local/Java/<jdk folder>
0
Raja Sekaran

Prüfen Sie, ob Ihre Alternativen auf die richtige zeigen, Sie zeigen möglicherweise auf eine andere Version und versuchen, die Datei hadoop-env.sh auf einer anderen installierten Version zu ändern. 

-alternatives --install/etc/hadoop/conf [generischer_name] [richtiger Pfad] Priorität {zur weiteren Überprüfung der Man-Page der Alternativen}

alternativen manuell einstellen, 

alternativen --set [generischer Name] [Ihr aktueller Pfad].

0
Rajarsh