18

ユーザー クラス パスを Hadoop クラス パスの前に使用する方法を示す例を数多く見てきました。多くの場合、これは m/r ジョブが特定のバージョンのライブラリを必要とする場合に行われますが、Hadoop は偶然にも以前のバージョンのライブラリ (たとえば、jackson の json パーサーや commons http など) を使用しています。

いずれにせよ:私は見た:

mapreduce.task.classpath.user.precedence
mapreduce.task.classpath.first
mapreduce.job.user.classpath.first

マッパーとリデューサーに、hadoop のデフォルトの依存関係の jar の前にユーザー定義の jar を配置するクラスパスを強制するために、これらのパラメーターのどれをジョブ構成に設定するのが適切ですか?hadoop_classpath

ところで、これはこの質問に関連しています: 最近見つけたDynamodb requestHandler の受け入れは、jar の競合によるものです。

4

5 に答える 5

5

したがって、0.20.203 を使用していると仮定すると、これはTaskRunner.javaコードで次のように処理されます。

  • お探しの物件は94番線にあります -mapreduce.user.classpath.first
  • 行 214 は、呼び出されたメソッドにデリゲートするクラスパスのリストを作成するための呼び出しが行われる場所です。getClassPaths(..)
  • getClassPaths()は 524 行で定義されており、設定プロパティを使用して、ジョブ + dist キャッシュ ライブラリを使用するか、hadoop ライブラリを最初にクラスパスに配置するかを決定していることがわかります。

Hadoop の他のバージョンでは、TaskRunner.java クラスをチェックして、これがすべて「半隠し構成」であるため、構成プロパティの名前を確認することをお勧めします。

static final String MAPREDUCE_USER_CLASSPATH_FIRST =
        "mapreduce.user.classpath.first"; //a semi-hidden config
于 2012-07-28T00:33:31.687 に答える
3

これらの設定は、マッパーまたはリデューサー タスクでのみ外部 jar のクラスを参照するために機能します。ただし、カスタマイズされた InputFormat などでこれらを使用している場合、クラスのロードに失敗します。これがどこでも (MR2 で) 確実に機能するようにする方法は、ジョブを送信するときにこの設定をエクスポートすることです。

export HADOOP_USER_CLASSPATH_FIRST=true
于 2014-11-05T20:31:34.230 に答える
1

同じ問題があり、Hadoop バージョン 0.20.2-cdhu03 で機能したパラメーターは「mapreduce.task.classpath.user.precedence」です。

この設定は CDH3U3 では動作しないことがテストされています。次の回答は Cloudera チームからのものです。

// JobConf job = new JobConf(getConf(), MyJob.class);
// job.setUserClassesTakesPrecedence(true);

http://archive.cloudera.com/cdh/3/hadoop/api/org/apache/hadoop/mapred/JobConf.html#setUserClassesTakesPrecedence%28boolean%29

于 2012-08-24T16:13:28.653 に答える
0

MapR ディストリビューションでは、プロパティは "mapreduce.task.classpath.user.precedence"
http://www.mapr.com/doc/display/MapR/mapred-site.xmlです。

<property>
    <name>mapreduce.task.classpath.user.precedence</name>
    <value>true</value>
    <description>Set to true if user wants to set different classpath. (AVRO) </description>
</property>

jobConf.setUserClassesTakesPrecedence(真);

于 2013-06-26T07:58:50.713 に答える