web-dev-qa-db-ja.com

HadoopHADOOP_CLASSPATHの問題

この質問は、ワーカーがjarを使用できるようにクラスター全体にjarを配布することについては言及していません。

これは、クライアントマシン上にいくつかの追加ライブラリを指定することを指します。具体的には、SequenceFileの内容を取得するために、次のコマンドを実行しようとしています。

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

このエラーがスローされます:text: Java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable

DoubleArrayWritableという書き込み可能なクラスがあります。実際、別のコンピューターではすべてがうまく機能します。

そのクラスを含むjarを含めるようにHADOOP_CLASSPATHを設定しようとしましたが、結果がありませんでした。実際、実行中:

   /path/to/hadoop/script classpath 

結果には、HADOOP_CLASSPATHに追加したjarが含まれていません。

問題は、hadoopを実行するときに追加のライブラリをどのように指定するかです(hadoopスクリプトがクラスパスに自動的に含めるライブラリ以外のライブラリを意味します)

役立つかもしれないいくつかのより多くの情報:

  • Hadoop.shスクリプト(または関連するスクリプト)を変更できません
  • ライブラリをhadoopインストールディレクトリの下の/ libディレクトリにコピーできません
  • Hadoop.shから実行されるhadoop-env.shには、次の行があります。export HADOOP_CLASSPATH=$HADOOP_HOME/libこれは、HADOOP_CLASSPATH envvarが無視される理由をおそらく説明しています。
8
Razvan

HADOOP_CLASSPATHの設定が許可されている場合

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

仕事をします。あなたの場合、この変数はhadoop-env.shoverriddenであるため、代わりに-libjarsオプションの使用を検討してください。

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

または、FsShellを手動で呼び出します。

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

誰かがhadoopクラスパスを確認したい場合は、ターミナルに_hadoop classpath_と入力します。
コンパイルするには、次を使用します:javac -cp $(hadoop classpath):path/to/jars/* Java_file.Java

1
subtleseeker

JarファイルをデフォルトのCLASSPATH変数に追加し、HADOOP_CLASSPATHも追加してみてください。次に、コマンドを実行します。

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