1

Hadoop API を使用してさまざまなリモート mapreduce ジョブを起動する jar があります (つまり、コマンドラインを使用してジョブを開始していません)。さまざまなジョブを実行するサービス jar は、maven の「jar-with-dependencies」で構築されています。

commons-codec 1.7 を使用するジョブを除いて、私のジョブはすべて正常に実行されます。

FATAL org.apache.hadoop.mapred.Child: 子の実行中にエラーが発生しました: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeAsString([B)Ljava/lang/String;

これは、jar に commons-codec 1.7 が含まれているのに対し、Hadoop インストールの lib には commons-codec 1.4 が含まれているためだと思います ...

Hadoop 1.0.3コアライブラリのcommons-codec 1.4ではなく、配布されたcommons-codec 1.7(これはジョブの依存関係として配布されていると思います)を使用するようにHadoopに指示する方法はありますか?

どうもありがとう!

注: Commons-codec-1.4.jar を Hadoop ライブラリ フォルダーから削除すると問題は解決しますが、あまり正気ではないようです。うまくいけば、より良い代替手段があります。

4

1 に答える 1

0

2 つのアプローチ:

  • commons-codec を hadoop 依存関係から除外し、commons-codec に別の明示的な依存関係を追加できるはずです。
  • Hadoop jar が含まれないように、スコープを provided に設定してみてください。これは、これらの jar がランタイム クラス パスにあることを前提としています。
于 2012-09-30T20:25:32.163 に答える