7

私は 2 つの mapreduce ジョブがあるシナリオにいます。私は Python に慣れており、mapreduce スクリプトを作成するために Python を使用し、同じために Hadoop ストリーミングを使用する予定です。Hadoop ストリーミングが使用されている場合、次の形式の両方のジョブをチェーンするのに便利な方法はありますか?

Map1 -> Reduce1 -> Map2 -> Reduce2

Java でこれを実現する方法はたくさんありますが、Hadoop ストリーミングには何かが必要です。

4

4 に答える 4

4

カスケードとストリーミングの使用方法に関するすばらしいブログ投稿を次に示します。 http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/

ここでの価値は、Java (カスケーディング クエリ フロー) とカスタム ストリーミング操作を同じアプリ内で混在させることができることです。これは他の方法よりもはるかに脆くないと思います。

Cascading の Cascade オブジェクトを使用すると、複数の Flow を連鎖させることができます (上記のブログ投稿によると、ストリーミング ジョブは MapReduceFlow になります)。

免責事項: 私は Cascading の作成者です

于 2011-01-07T17:43:42.427 に答える
3

Yelp の MRJobを試して、仕事を終わらせることができます。これは、Hadoop クラスターまたは EC2 の Hadoop ストリーミング上で実行できるチェーン ジョブを作成できるオープンソースの MapReduce ライブラリです。非常にエレガントで使いやすく、データが通過するマッパーとリデューサーの正確なチェーンを指定するためにオーバーライドできる、steps と呼ばれるメソッド。

https://github.com/Yelp/mrjobでソースをチェックアウトし、http://packages.python.org/mrjob/
でドキュメントをチェックアウトします。

于 2011-02-12T20:40:21.733 に答える
1

通常、Hadoop ストリーミングと Python でこれを行う方法は、最初にジョブを実行するために作成した bash スクリプト内からです。私は常に bash スクリプトから実行します。このようにして、エラーに関するメールと成功に関するメールを取得し、より大きなイベント処理システムで機能する別の Ruby または Python スクリプトをラップするパラメーターを柔軟に渡すことができます。

したがって、最初のコマンド (ジョブ) の出力は、次のコマンド (ジョブ) への入力になります。これは、コマンド ラインから引数として渡される bash スクリプトの変数にすることができます (シンプルかつ迅速)。

これを行うのに役立つOozie http://yahoo.github.com/oozie/design.html Hadoop 用のワークフロー エンジンをチェックアウトすることもできます (ストリーミングをサポートしていますが、問題はありません)。私が始めたとき、私はこれを持っていなかったので、私は自分のものを構築しなければならなくなりましたが、これはkewlシステムで便利です!!!!

于 2011-01-07T17:17:45.063 に答える
1

Python でマッパーとリデューサーを既に作成している場合は、そのような操作が簡単な Dumbo を使用することを検討します。map reduce ジョブのシーケンス、mapper、reducer などはすべて、コマンド ラインから実行できる 1 つの Python スクリプトにあります。

于 2011-02-12T20:28:50.440 に答える