1

クラスターに Cloudera Hadoop バージョン 4 がインストールされています。google protobuffer jar バージョン 2.4 に同梱されています。私のアプリケーション コードでは、protobuffer バージョン 2.5 でコンパイルされた protobuffer クラスを使用しています。

これにより、実行時に未解決のコンパイルの問題が発生します。外部 jar を使用して map reduce ジョブを実行する方法はありますか、それとも cloudera がサービスをアップグレードするまで立ち往生していますか?

ありがとう。

4

1 に答える 1

2

はい、外部 jar を使用して MR ジョブを実行できます。

次の例のように、ジョブの送信時にと の両方HADOOP_CLASSPATHに依存関係を必ず追加してください。-libjars

lib以下を使用して、現在の およびディレクトリからすべての jar 依存関係を追加できます。

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`echo *.jar`:`echo lib/*.jar | sed 's/ /:/g'`

を使用してジョブを開始するときhadoop jarは、依存関係の jar ファイルも渡す必要があることに注意して-libjarsください。私は使用するのが好きです:

hadoop jar <jar> <class> -libjars `echo ./lib/*.jar | sed 's/ /,/g'` [args...]

注:コマンドには別のsed区切り文字が必要です。は分離されており、分離するHADOOP_CLASSPATH必要があります。:-libjars,

編集:クラスパスを最初に解釈して、jar (事前にパッケージ化されたjarではなく) が使用されるようにする必要がある場合は、次を設定できます。

export HADOOP_USER_CLASSPATH_FIRST=true

于 2013-04-20T20:06:55.460 に答える