8

この質問は、ワーカーが使用するためにクラスター全体に 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 という書き込み可能なクラスがあります。実際、別のコンピューターではすべてが正常に機能します。

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

   /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 環境変数が無視される理由を説明しています。
4

3 に答える 3

15

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

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

仕事をします。あなたの場合、この変数はオーバーライドされるため、代わりにオプションhadoop-env.shを使用することを検討してください。-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
于 2012-10-17T21:20:00.250 に答える
0

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

于 2012-10-18T05:51:17.470 に答える