2017-03-27 5 views
2

特定の問題のMapReduceアルゴリズムを実装しようとしています。私のマッパーでは、大きなサイズのテキストオブジェクトを処理する必要があるとしましょう。私の質問は次の例に要約されています。私はテキストオブジェクトを持っています:Today is a lovely dayと私は言葉にいくつかの処理を行う必要があります。私は減速にキーと値のペア<1,Today is a lovely day>を送信してから処理することができますHadoopのMapReduce - MapperからReducerにデータを送信する

<1,Today> 

<1,is> 

<1,a> 

<1,lovely> 

<1,day> 
  • :私は、フォームの減速キーと値のペアに送信することができます

    • :だから私は2つのオプションがありますそれ、例えばStringオブジェクトをトークン化します。

    この場合の最適な方法は何ですか?最初のケースでは、減速機にもっとデータを送る必要がありますが、2番目のケースと同様にトークン化するStringオブジェクトはありません。しかし、2番目のケースでは、Mapperが送信するデータの量が少なくなっています。

  • 答えて

    2

    トラフィックを減らしてパフォーマンスを大幅に向上させるとは思えません。ここで本当に重要なことは、第1のケースでは、すべてのデータが、レデューサーに入力される前にグループ化され、2つ目のオプションとはまったく異なるキーと値のペアが生成されることです。私はあなたがそれらの上で同じ操作を実行することができるとは確信していません。あなたが減速入力を見ることができるように

    <a, 1> 
    
    <another, 1> 
    
    <day, 2> 
    
    <is, 2> 
    
    <lovely,2> 
    
    <Today, 2> 
    

    :あなたが持っているだろうと言うことができます:

    <Today is a lovely day> 
    <Today is another lovely day> 
    

    を最初のケースでは、あなたの減速は、単語のグループ化されたペアで動作します(そのキーを仮定することは言葉ではなく番号です)より高度なシナリオでは、入力の値に対してロジックを実行します(最大または検索平均を見つけるなど)。

    後者の場合にはあなたの鍵は、文章のようになります。

    <Today is a lovely day, 1> 
    
    <Today is another lovely day, 1> 
    

    だから二つの異なる減速は、これら2つのペアを処理することを可能性があります。あなたがそれに対して実行できる操作は、異なるデータのセットとなるため、最初の操作と少し異なります。最初のケースで行われたように、キーベースの最大値または平均値を実行する方法はありません

    +0

    ありがとうございました(upvoted)。だから、基本的には、2番目のケースではデータを少なく(if)送信しますが、2番目のオプションを適用すると操作の面でより多くの利点があると言います。右? – thanasissdr

    +0

    @thanasissdrあなたはどちらかから多かれ少なかれ恩恵を受けるとは言えませんが、私はこれらの2つのケースが異なるユースケースを対象としていると言います。第二の選択肢では、あなたが最初に行うことと反対に行うことはできません。 2番目のケースでは、データが少なくなります。これはおそらく想定しているほどの最終パフォーマンスには影響しません。あなたの時間の大部分は、マッパーとレデューサーによって実行される計算に費やされます。 – Alex

    関連する問題