0

行の下の問題は解決しましたが、別の問題に直面しています。

私はこれをやっています:

DistributedCache.createSymlink(job.getConfiguration()); 
DistributedCache.addCacheFile(new URI   
("hdfs:/user/hadoop/harsh/libnative1.so"),conf.getConfiguration()); 

そしてマッパーで:

System.loadLibrary("libnative1.so");

(私も System.loadLibrary("libnative1"); System.loadLibrary("native1"); を試しました

しかし、私はこのエラーが発生しています:

java.lang.UnsatisfiedLinkError: no libnative1.so in java.library.path

java.library.path を何に設定すればよいかまったくわかりません.. /home に設定して、すべての .so を分散キャッシュから /home/ にコピーしようとしましたが、それでも機能しませんでした :(

提案/解決策を教えてください。

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

マッパーが実行されているマシンのシステム環境変数 (具体的には、LD_LIBRARY_PATH) を設定したいと考えています。

私は試した :

Runtime run = Runtime.getRuntime();
Process pr=run.exec("export LD_LIBRARY_PATH=/usr/local/:$LD_LIBRARY_PATH");

しかし、IOException がスローされます。

についても知っている

JobConf.MAPRED_MAP_TASK_ENV

しかし、私は JobConf の代わりに Job & Configuration を持つ Hadoop バージョン 0.20.2 を使用しています。

そのような変数を見つけることができません。これも Hadoop 固有の環境変数ではなく、システム環境変数です。

解決策/提案はありますか? 前もって感謝します..

4

1 に答える 1

3

クラスターのすべてのノードでこの変数をエクスポートしないのはなぜですか?

とにかく、ジョブを送信する際に、以下のように構成クラスを使用します

Configuration conf = new Configuration();
conf.set("mapred.map.child.env",<string value>);
Job job = new Job(conf);

値の形式は k1=v1,k2=v2 です。

于 2012-04-20T15:04:46.090 に答える