webentwicklung-frage-antwort-db.com.de

Probleme mit Hadoop HADOOP_CLASSPATH

Diese Frage bezieht sich nicht auf das Verteilen von Gläsern im gesamten Cluster, damit die Mitarbeiter sie verwenden können.

Es bezieht sich auf die Angabe einer Reihe zusätzlicher Bibliotheken auf dem Client-Computer. Genauer gesagt: Ich versuche, den folgenden Befehl auszuführen, um den Inhalt einer SequenceFile abzurufen:

   /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file

Es wirft mir diesen Fehler: text: Java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable

Ich habe eine beschreibbare Klasse namens DoubleArrayWritable. In der Tat funktioniert auf einem anderen Computer alles gut.

Ich habe versucht, den HADOOP_CLASSPATH so einzustellen, dass er die jar enthält, die diese Klasse enthält, aber ohne Ergebnisse. Eigentlich beim Laufen:

   /path/to/hadoop/script classpath 

Das Ergebnis enthält nicht das Glas, das ich zu HADOOP_CLASSPATH hinzugefügt habe.

Die Frage ist: Wie können Sie zusätzliche Bibliotheken angeben, wenn Sie Hadoop ausführen?

Einige weitere Informationen, die helfen könnten:

  • Ich kann das hadoop.sh-Skript (und keine zugehörigen Skripte) nicht ändern.
  • Ich kann meine Bibliothek nicht in das Verzeichnis/lib unter dem Installationsverzeichnis von hadoop kopieren
  • In der Datei hadoop-env.sh, die von der Datei hadoop.sh ausgeführt wird, steht folgende Zeile: export HADOOP_CLASSPATH=$HADOOP_HOME/lib, was wahrscheinlich erklärt, warum meine HADOOP_CLASSPATH-Umgebungsvariable ignoriert wird.
7
Razvan

Wenn Sie HADOOP_CLASSPATH setzen dürfen, dann

export HADOOP_CLASSPATH=/path/to/jar/myjar.jar:$HADOOP_CLASSPATH; \
    hadoop fs -text /path/in/HDFS/to/my/file

werde den Job machen. Da diese Variable in Ihrem Fall überschrieben in hadoop-env.sh ist, sollten Sie stattdessen die Option -libjars verwenden:

hadoop fs -libjars /path/to/jar/myjar.jar -text /path/in/HDFS/to/my/file

Alternativ können Sie FsShell auch manuell aufrufen:

Java -cp $HADOOP_HOME/lib/*:/path/to/jar/myjar.jar:$CLASSPATH \
org.Apache.hadoop.fs.FsShell -conf $HADOOP_HOME/conf/core-site.xml \
-text /path/in/HDFS/to/my/file
15
Lorand Bendig

Wenn jemand den Hadoop-Klassenpfad überprüfen möchte, geben Sie hadoop classpath In das Terminal ein.
Um es zu kompilieren, benutze folgendes: javac -cp $(hadoop classpath):path/to/jars/* Java_file.Java

1
subtleseeker

Versuchen Sie, Ihre JAR-Datei in der Standardvariablen CLASSPATH hinzuzufügen und auch HADOOP_CLASSPATH an diese Variable anzuhängen. Führen Sie dann Ihren Befehl aus.

export CLASSPATH=/your/jar/file/myjar.jar:$CLASSPATH:$HADOOP_CLASSPATH /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file

0
Rahul Mahajan