3

クラスタで Hadoop ジョブを実行する前に、LD_LIBRARY_PATH JAVA_LIBRARY_PATH と CLASSPATH を変更する必要があります。LD_LIBRARY_PATH と JAVA_LIBRARY_PATH では、ジョブの実行中に必要ないくつかの jar の場所を追加する必要があります。これらの jar はクラスターで使用できるため、CLASSPATH と同様です。

私は 3 つのノード クラスターを持っています。3 つのデータ ノードすべてに対して、この LD_LIBRARY_PATH と CLASSPATH を変更して、クラスパスに追加されたクラスター ノードで使用可能な jar を変更する必要があります。クラスターノードで利用可能なすべてのjarを使用するために、ジョブの実行中にjarの配布を避けています。以下のオプションを試しました

1.hadoop-env.sh を変更して CLASSPATH を変更しようとしました

export HADOOP_TASKTRACKER_OPTS="-classpath:/opt/oracle/oraloader-2.0.0-2/jlib/

しかし、上記のことは CLASSPATH ではなく HADOOP_CLASSPATH を変更します

  1. LD_LIBRARY_PATH と JAVA_LIBRARY_PATH については、私の場所が提案されているように、mapred-site.xml に以下のプロパティを追加するのにうんざりしましたが、うまくいきませんでした。

    <物件>

    < name >mapred.child.env< /name >

    < 値 >JAVA_LIBRARY_PATH=/opt/oracle/oraloader-2.0.0-2/lib/< /値 >

    < 値 >LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle/oraloader-2.0.0-2/lib/< /値 >

    < description>タスク トラッカーの子プロセス用にユーザーが追加した環境変数。例: 1) A=foo これは環境変数 A を foo に設定します。 2) B=$B:c これは tasktracker の B 環境変数を継承します。< /説明>

    < /プロパティ>

また、3 つのデータ ノードすべて、すべてのタスクトレーカー、および 2 つの NAMENOdes を再起動しました。それでもこれらの変数は設定されておらず、私の Hadoop ジョブは、テストの実行に必要なすべての jar ファイルを見つけることができません。

エラーログ::

エラー: java.lang.ClassNotFoundException: oracle.i18n.text.OraDateFormat at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

クラスター ノードで HADOOP_CLASSPATH を echo すると、hadoop ジョブを実行するために必要なすべてのものが来ます。しかし、次のjarをJAVA_LIBRARY_PATHに追加する必要があると思いますが、追加されません。

4

1 に答える 1

0

車輪を再発明しないでください。

実装で使用ToolRunnerする場合 (Java で map-reduce を実装する場合は実際に使用する必要があります) -libjars jar1,jar2、jar をクラスターに出荷するために使用できます。

Tom White による「Hadoop: The definitive guide」の「Side Data Distribution」セクションを確認してください。

于 2012-12-05T09:49:54.367 に答える