この質問は、ワーカーが使用するためにクラスター全体に 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 環境変数が無視される理由を説明しています。