2016-08-01 3 views
1

私は減速がコンバイナmap reduceでコンバインドフェーズなしで減速機への入力は何になりますか?

<What,1,1,1> <do,1,1> <you,1,1> <mean,1> <by,1> <Object,1> 
<know,1> <about,1> <Java,1,1,1> 
<is,1> <Virtual,1> <Machine,1> 
<How,1> <enabled,1> <High,1> <Performance,1> 

から以下の入力を受け取り、私の疑問は、私がコンバイナをスキップしてマッパーが への出力を渡すことができますどのような場合であるコンバイナ http://www.tutorialspoint.com/map_reduce/map_reduce_combiners.htm

でのMapReduceのためのチュートリアルを読んでいます(コンバイナを使用せずに)グループ化操作を実行せずに、シャッフルおよびソートフェーズを通過できるようにします。

マッパーフェーズが終わった後、シャッフルとソートフェーズを経て、どの入力が減算器に送られますか?

レデューサーの入力を確認できますか?

答えて

0

私は、このチュートリアルから見た出力が多分間違っていると言います。この例では

<What,3> <do,2> <you,2> <mean,1> <by,1> <Object,1> 
<know,1> <about,1> <Java,3> 
<is,1> <Virtual,1> <Machine,1> 
<How,1> <enabled,1> <High,1> <Performance,1> 

、あなたは絶対に組み合わせ使用することはできませんし、最終的な結果は同じになります。コンバイナからの出力は、実際に次のようになり、ステージを組み合わせたように、減速機からのコードを再利用していますので、複数のマッパーとレデューサーがあるシナリオでは、結合はマッパーからの出力でローカルアグリゲーションを行い、最終アグリゲーションを減らします。

結合なしで実行すると、引き続き縮小段階でキーベースのグループ化が行われます。このコンバインは、マップ出力であなたのためにローカルアグリゲーションを行っています。

reduceへの入力は、マッパーによって書き込まれた出力になりますが、キーでグループ化されます。

+0

上記のチュートリアルの例では、コンバイナを使用すると、減速器が2回実行されると思います。一度グループ分けを行い、再び出力を出す。私は減速機のコードでsystem.out .printlnを使いログの出力を見た。当初、それはグループ化を実行し、次いで還元剤はを放出する。結果はコンバイナーの有無にかかわらずmapreduceと同じです。 – raj

+0

これは、「一度グループ化を行い、再度出力を出す」という誤りです。結合演算は、マッパーの出力で実行されます。これは、通常、指定されたキーの値のサブセットになります。シャッフルされてソートされません。 1回の実行を減らすだけで、キーのすべてのキーと値のペアが保証されます。したがって、この場合のコンバイナは、ネットワークを介して送信されるデータの量を減らすために、いくつかの初期集約を行うことができ、ジョブを終了するために縮小を実行します。 –

+0

私は、減速機がコンバイナーと減速機の役割を果たしていると言っています。最初に減速器のforループでは、コンバイナの出力にを与えるワードの合計を実行し、この出力は減速器のフェーズの入力として取られます。今度はのval.getは3を与え、同じものが最終出力としてレデューサーによって放出されます。 – raj

関連する問題