1

MQ を監視して受信メッセージを監視し、map/reduce ジョブを Hadoop に送信する、ある種の「ブートストラップ」クラスを作成したいと考えています。これらのジョブは、一部の外部ライブラリを頻繁に使用します。現時点では、これらのジョブの実装があり、bin、lib、および log フォルダーを含む ZIP ファイルとしてパッケージ化されています (すべてを結合するために maven-assembly-plugin を使用しています)。

ここで、既存のアプリケーションの一部を使用する Mapper と Reducer の小さなラッパーを提供したいと思います。

私が知る限り、ジョブが送信されると、Hadoop はマッパー/リデューサー クラスを持つ JAR ファイルを見つけようとし、この jar ファイルをネットワーク経由でデータ ノードにコピーします。データ ノードはデータの処理に使用されます。しかし、Hadoop にすべての依存関係をコピーするように指示する方法は明確ではありません。

maven-shade-plugin を使用して、ジョブと依存関係を含む uber-jar を作成し、ブートストラップ用の別の jar (hadoop シェル スクリプトで実行される jar) を作成できます。

ご意見をお聞かせください。

4

3 に答える 3

2

1 つの方法は、必要な jar を分散キャッシュに入れることです。もう 1 つの方法は、必要なすべての jar を Hadoop ノードにインストールし、TaskTracker にそれらの場所を伝えることです。この記事を一度読んでみることをお勧めします。同じ問題について話します。

于 2013-07-08T19:02:53.933 に答える
0

リモート JVM で実行されるジョブの依存関係を指定するには、hadoop ランチャー スクリプトの -libjars オプションを使用します。$HADOOP_CLASSPATH 変数を使用して、ローカル JVM で実行されている JobClient の依存関係を設定します

詳細な議論はこちら: http://grepalex.com/2013/02/25/hadoop-libjars/

于 2013-10-23T14:29:51.527 に答える
0

Maven を使用して依存関係を管理し、ビルドおよびデプロイ中に正しいバージョンが使用されるようにします。人気のある IDE には Maven のサポートがあるため、編集およびビルド用のクラス パスの作成について心配する必要はありません。最後に、アプリとすべての依存関係を含む単一の jar ("jar-with-dependencies") をビルドするように Maven に指示できるため、デプロイが非常に簡単になります。

ランタイム クラス パスに存在することが保証されている Hadoop などの依存関係については、"provided" のスコープで定義できるため、uber jar には含まれません。

于 2013-07-08T19:31:18.217 に答える