5

HDFSを参照するクラスパスを設定する方法を理解しようとしていますか?参照が見つかりません。

 java -cp "how to reference to HDFS?" com.MyProgram 

Hadoopファイルシステムを参照できない場合は、参照されているすべてのサードパーティのlib /jarを各Hadoopマシンの$HADOOP_HOMEの下にコピーする必要があります...しかし、ファイルをHadoopファイルシステムに配置することでこれを回避したいと思います。これは可能ですか?

プログラムを実行するためのhadoopコマンドラインの例(私の期待はこのようなものです、多分私は間違っています):

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.0.3.jar -input inputfileDir -output outputfileDir -mapper /home/nanshi/myprog.java -reducer NONE -file /home/nanshi/myprog.java

ただし、上記のコマンドライン内で、Javaクラスパスを追加するにはどうすればよいですか?-cp"/home/nanshi/wiki/Lucene/lib/lucene-core-3.6.0.jar:/home/nanshi/Lucene/bin"のように

4

3 に答える 3

11

あなたがやろうとしているのは、分散プログラムにサードパーティのライブラリを含めることだと思います。あなたができる多くのオプションがあります。

オプション1)私が見つけた最も簡単なオプションは、すべてのjarをすべてのノードの$ HADOOP_HOME / lib(例:/usr/local/hadoop-0.22.0/lib)ディレクトリーに置き、jobtrackerとtasktrackerを再起動することです。

オプション2)これにはlibjarsオプションコマンドを使用します。これはhadoop jar-libjarscomma_seperated_jarsです。

オプション3)jarのlibディレクトリにjarを含めます。あなたはあなたの瓶を作成している間にそれをしなければならないでしょう。

オプション4)すべてのjarをコンピューターにインストールし、それらの場所をクラスパスに含めます。

オプション5)これらのjarファイルを分散キャッシュに入れて試すことができます。

于 2012-07-28T05:29:47.593 に答える
3

クラスパスにHDFSパスを追加することはできません。Java実行可能ファイルは、次のようなものを解釈できません。

hdfs://path/to/your/file

ただし、サードパーティのライブラリをそれらのライブラリを必要とする各タスクのクラスパスに追加するには、-libjarsオプションを使用します。これは、ジョブをセットアップして開始し、そのドライバークラスを実行するときにコマンドラインで-libjarsオプションを使用する、いわゆるドライバークラス(実装ツール)が必要であることを意味します。次に、ツールはGenericParserを使用してコマンドライン引数(-libjarsを含む)を解析し、JobClientの助けを借りて、libを必要とするすべてのマシンに送信し、それらをのクラスパスに設定するために必要なすべての作業を行います。それらのマシン。

さらに、MRジョブを実行するには、ディストリビューションのbin/ディレクトリにあるhadoopスクリプトを使用する必要があります。

次に例を示します(ジョブとドライバークラスを含むjarを使用):

 hadoop jar jarfilename.jar DriverClassInTheJar 
 -libjars comma-separated-list-of-libs <input> <output>
于 2012-07-27T23:08:04.493 に答える
2

jarパスは
-libjarshdfs:// namenode / path_to_jarとして指定できます。これは、Hiveで使用しました。

于 2014-04-08T07:04:07.057 に答える