クラスタで 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 を変更します
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に追加する必要があると思いますが、追加されません。