2011-01-07 14 views
7

私は2つのmapreduceジョブがあるシナリオです。私は、Pythonをより快適に使い、mapreduceスクリプトを書くためにそれを使用し、同じもののためにハープ・ストリーミングを使用することを計画しています。ハープ・ストリーミングが使用されているときにフォームに従った両方のジョブを連鎖させるのに便利ですか?Hadoopストリーミングで複数のmapreduceタスクを連結する

マップMap1 - > Reduce1 - >マップ2 - > Reduce2

私はJavaでこれを達成する方法をたくさん聞いたが、私はHadoopのストリーミングのために何かを必要としています。

答えて

4

ここでは、カスケードとストリーミングの使用方法に関する素晴らしいブログ記事を掲載しています。 http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/

ここでの値は、同じアプリケーションでカスタムストリーミング操作とJava(カスケードクエリフロー)を混在させることができます。私は他の方法よりもはるかに脆弱であることがわかります。

カスケードのカスケードオブジェクトを使用すると、複数のフローを連鎖させることができます(上記のブログ投稿を使用すると、StreamingジョブはMapReduceFlowになります)。

免責事項:私はすでにPythonであなたのマッパーと減速を書いている場合は、私はそのような操作は簡単ですダンボを使用して検討する

+0

https://github.com/Yelp/mrjob
とドキュメントのソースうーん、私はこれがどのように機能するかを確認していません。私は質問をしました:http://stackoverflow.com/questions/35249753/call-mapper-when-reducer-is-done – gsamaras

1

通常、HadoopストリーミングとPythonでこれを行う方法は、私が最初にジョブを実行するために作成するbashスクリプトの中からです。常に私はbashスクリプトから実行します。これにより、エラーや電子メールの成功について電子メールを受け取って、より大きなイベント処理システムで動作する別のRubyスクリプトやPythonスクリプトからパラメータを渡すことができます。

ので、最初のコマンド(ジョブ)の出力は、あなたのbashスクリプト内の変数は、(簡単かつ迅速に)コマンドライン

から引数として渡すことができ、次のコマンド(ジョブ)に入力され、

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

1

カスケードの著者です。地図の縮小作業、マッパー、減速機などはすべて、コマンドラインから実行できる1つのPythonスクリプトに含まれています。

3

Yelp's MRJobあなたの仕事を得るために試してみることができます..あなたのHadoop ClusterまたはEC2上でHadoop Streamingの上で実行できる連鎖ジョブを書くことができるオープンソースのMapReduceライブラリ..かなりエレガントで使いやすいまた、データを通過させるマッパーとレデューサーの正確なチェーンを指定するためにオーバーライドすることができるステップと呼ばれるメソッドがあります。

アウトhttp://packages.python.org/mrjob/

関連する問題