2014-11-07 13 views
5

Hallo, ich bin neu in Hadoop und habe vor ein paar Tagen angefangen zu lernen. Ich folgte nur den Anweisungen von Digital Ocean zu . Danach habe ich einfach ein einfaches Beispielprogramm namens WordCount aus dem Hadoop docs ausprobiert.Hauptklasse beim Kompilieren von Hadoop nicht gefunden Beispielprogramm

Meine Hadoop-Version ist 2.5.1, das ist die gleiche Version mit dem, was im Tutorial verwendet wird, und es läuft auf Ubuntu Precise. Ich stelle sicher, dass ich das richtige Setup vorgenommen habe, wie es im Tutorial heißt. Hier ist das Ende meiner ~/.bashrc Inhalte.

 ... 
#HADOOP VARIABLES START 
export JAVA_HOME=/usr/lib/jvm/java-7-oracle 
export HADOOP_INSTALL=/usr/local/hadoop 
export PATH=$PATH:$HADOOP_INSTALL/bin 
export PATH=$PATH:$HADOOP_INSTALL/sbin 
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL 
export HADOOP_COMMON_HOME=$HADOOP_INSTALL 
export HADOOP_HDFS_HOME=$HADOOP_INSTALL 
export YARN_HOME=$HADOOP_INSTALL 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native 
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib" 
export HADOOP_PREFIX=/usr/local/hadoop 
#HADOOP VARIABLES END 

Auch Ich habe auf meinem java Haus config und das Ergebnis ist, wie unten

sudo update-alternatives --config java 
There are 3 choices for the alternative java (providing /usr/bin/java). 

    Selection Path           Priority Status 
------------------------------------------------------------ 
    0   /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061  auto mode 
    1   /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061  manual mode 
    2   /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1051  manual mode 
* 3   /usr/lib/jvm/java-7-oracle/jre/bin/java   1   manual mode 

Also änderte ich alle Werte JAVA_HOME sowohl in bashrc und hadoop-env.sh Dateien /usr/lib/jvm/java-7-oracle. Ich stelle auch sicher, dass Dfs und Yarn beide gestartet sind.

Wenn jedoch i die WordCount.java kompiliert diesen Befehl

hadoop com.sun.tools.javac.Main WordCount.java 

Nichts meinen Weg geht. Ich habe diesen Fehler erhalten. Beachten Sie, dass ich den Hadoop-Befehl stattdessen bin/hadoop verwende, da der Befehl ordnungsgemäß funktioniert, da er in der Datei bashrc definiert wurde.

Was ist die mögliche Ursache für diesen Fehler und wie wird man davon los? Es könnte Java Classpath Problem sein, denke ich, aber ich bin immer noch nicht in der Lage, das Detail herauszufinden. Bei jeder Problemumgehung in Bezug auf dieses Problem geht es um die Ausführung des Befehls java oder javac, nicht um den Befehl hadoop.

Ich möchte nur das Beispielprogramm zuerst arbeiten, bevor Sie lernen, wie es funktioniert. Jede Hilfe wäre willkommen. Dank ..

+0

Vielleicht wird ein 'export PATH = $ PATH: $ JAVA_HOME/bin 'den Trick machen. Kannst du 'javac -version' überhaupt ausführen? – blackSmith

+0

@blackSmith 'java -version' wurde erstellt javac 1.6.0_33 –

+0

Ich fragte bout' javac' nicht 'java'. Das Problem ist höchstwahrscheinlich auf die Nichtverfügbarkeit von 'javac' im Klassenpfad zurückzuführen. Versuchen Sie 'JAVA_HOME =/usr/lib/jvm/java-6-openjdk-amd64' und fügen Sie dann' JAVA_HOME' zu 'Path' hinzu, wie zuvor gezeigt. Es sollte funktionieren. – blackSmith

Antwort

2

Versuchen von hadoop Verzeichnis Ausführung

cd YARN_HOME bin/hadoop jar absolute path to jar file WordCount input pathoutput path in hdfs

Schauen Sie sich den folgenden Link http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Example:_WordCount_v2.0

+0

welche JAR-Datei meinen Sie? –

+0

Es ist der Speicherort der JAR-Datei, die das WordCount-Programm und seine Abhängigkeiten enthält. –

+0

Hallo, sogar der Code ist noch nicht kompiliert und daher habe ich Hadoop WordCount.java ausgeführt, aber es ist fehlgeschlagen. –

1

Assuming you are using Eclipse or any other IDE,
Wie ich in this Beitrag erwähnt, erstellen Sie ein maven basierend einfach mit Ihrem Projekt wordcount Klasse.
So werden alle Abhängigkeiten behandelt. Nächste Right click auf Ihrem Projekt und wählen Export Option und geben Sie einen Namen <hadoop-example>.jar und dann nächste, generieren Sie eine JAR-Datei für Ihr Wordcount-Projekt.

You don't need to explicitly compile your programs, Eclipse will do it for you once export is successful

Wenn Sie hadoop auf demselben Rechner installiert, dann start all the daemons und überprüfen jps verwenden, ob alle Daemons oder nicht gestartet.
Andernfalls kopieren Sie die JAR-Datei auf die Virtual Machine, auf der hadoop installiert ist. Gehen Sie zum Speicherort jar und führen Sie den folgenden Befehl aus.

hadoop jar <hadoop-example>.jar <fully qualified main class name> hdfsInputPath hdfsOutputPath 

Dies wird Ihre Hauptklasse (WordCount in Ihrem Fall) läuft
Man sollte den obigen Befehl verwenden, um alle hadoop Programm auszuführen mit der Befehlszeile mithilfe von JAR-Datei und dann Haupt-Klassennamen (WorkCount) in Ihrem Fall .
Sie können die WordCount als Application-Einstiegspunkt Main-Klasse beim Exportieren der JAR-Datei machen. Sie müssen also nicht den vollständig qualifizierten Namen angeben. Es wäre so.

hadoop jar <hadoop-example>.jar hdfsInputPath hdfsOutputPath 

Bitte versuchen Sie dies und lassen Sie uns wissen, wenn es Ihnen hilft.
Update: Wie in den Kommentaren erwähnt, verwendet IDE nicht.

Aber bevor Sie laufen, sollten Sie ein Glas machen, das alle Abhängigen benötigt, um zu kompilieren.
Also nehmen Sie eine Variable als HADOOP_CLASSPATH_LIBS und vergeben Sie alle Gläser in
<installed-hadoop>/share/hadoop/<subfolder>/lib.
For every jar, you should give the absolute path and export this variable.
Welche können Sie kompilieren und dann eine JAR-Datei erstellen. Sobald Sie jar haben, können Sie die obigen Schritte ausführen, um es auszuführen. Wenn mehr Hilfe benötigt wird, kann helfen.
Hoffe es hilft.

+0

Ich benutze nicht Eclipse. Dies läuft auf Ubuntu Server –

2

Ich denke Java ist nicht richtig aktiviert. Also geh bitte in die hadoop-env.sh Datei und aktiviere das Java. Überprüfen Sie auch die Java-Version und JRE-Version. Beide müssen dieselbe Version haben.

1

Hadoop benötigt den jdk-Pfad für JAVA_HOME. Stellen Sie sicher, dass Sie den jdk-Pfad und nicht jre festgelegt haben. Es scheint, dass Sie Java manuell installiert haben. Überprüfen Sie die Version für javac, um sicherzustellen, dass sie aktiviert ist.

javac -version 

Überprüfen Sie similar answer.

0

Try HADOOP_CLASSPATH Umgebungsvariable

export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar:<path to hadoop libs> 
0

Hadoop Arbeit mit den beiden openjdk und oracle jdk, aber Sie verwenden oracle jdk. Ich hatte das gleiche Problem, also habe ich folgende Dinge getan.

1)export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 
2)export PATH=${JAVA_HOME}/bin:${PATH} 
3)export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar 

Nachdem dieser Befehl im Terminal laufen können Sie Java-Datei kompilieren. Hadoop kann den richtigen Java-Pfad nicht finden, deshalb erhalten Sie diesen Fehler.

Verwandte Themen