2012-04-13 12 views
0

Hadoopで新しくなった。私はHadoop 0.22を使用しています。私は地元のクラスパスにjarファイルを追加するために使用する必要がどのようなコードMapクラスでHadoop分散キャッシュが機能しない

Job job = Job.getInstance(configuration); 
    ... 
    job.addArchiveToClassPath(new Path(JAR_DIR); 
    ... 

:ドライバで は、このコードをI'used?

詳細

私はマップに必要な仕事をしていると位相を削減htmlunit.jar.I上記のコードでCLASSPATHにこのjarファイルを追加しますが、私は仕事を依頼するときに、私はラインでClassNotFoundExceptionが持っています上記のコードがOKで、DistributedCacheが自動的にtasktrackersクラスパスのjarを追加すると、何が問題になるのでしょうか? 私はジョブをサブミットするときに-libjars htmlunit.jarオプションも使用する必要がありますか?私は別のハープコンポーネントを使用する必要がありますか?

+0

[link] http://hadoop.apache.org/common/docs/r0.20.0/api/org/apache/hadoop/filecache/DistributedCache.htmlを参照してください。妨害されたキャッシュを使用する方法の例を示します。また、あなたはその質問を精緻化することができますか? –

+0

あなたの質問は何ですか?単に「働かない」以外の詳細を提示しないと、あなたを助けることはできません。 –

答えて

0

何もする必要はありません。

あなたが言っているジョブクラスパスにjarファイルを追加すると

あるごマッパー限り、「マップのクラスパスでこれを含め、雇用削減」

を減速機はMapperとReducerの基底クラスから拡張され、それが「うまくいく」でしょう。

価値があることに注意してください。必要な個々のJarにaddFileToClassPathを使用することをお勧めします。

代わりに、ソースと依存関係を含む単一のjarファイルを作成することもできます(これを行います)。

いつものようにコードjarをビルドし、jarファイルにlibという名前のサブディレクトリを作成し、そこにすべての依存関係jarファイルを追加します。その後、ジョブ全体が自己完結し、分散キャッシュに他のjarを追加することについて心配する必要はありません。

だから、たとえば次のような内容の瓶を持っていると思います:

/com/example/Something.class 
/com/example/SomethingElse.class 
/lib/dependency.jar 
/lib/dependency2.jar 

(jarファイルは単なるzipファイルなので、あなたがそれを構築する正規のzip作成ユーティリティを使用することができます)

さまざまな理由から、これは依存関係の.classファイルをjarファイルに直接追加するよりも優れています。

関連する問題