web-dev-qa-db-ja.com

hadoopマップは二次ソートを削減します

Hadoopで2次ソートがどのように機能するかを説明できますか?
なぜGroupingComparatorを使用する必要があり、hadoopでどのように機能するのですか?

以下のリンクをたどっていましたが、groupcomapatorがどのように機能するのか疑問がありました。
グループ化コンパレーターがどのように機能するか説明できますか?

http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html

21
user1585111

グループ化コンパレータ

データがレデューサーに到達すると、すべてのデータがキーでグループ化されます。複合キーがあるため、レコードが自然キーのみでグループ化されていることを確認する必要があります。これは、カスタムGroupPartitionerを記述することで実現されます。レコードをグループ化するために、TemperaturePairクラスのyearMonthフィールドのみを考慮するComparatorオブジェクトがあります。

public class YearMonthGroupingComparator extends WritableComparator {

    public YearMonthGroupingComparator() {
        super(TemperaturePair.class, true);
    }

    @Override
    public int compare(WritableComparable tp1, WritableComparable tp2) {
        TemperaturePair temperaturePair = (TemperaturePair) tp1;
        TemperaturePair temperaturePair2 = (TemperaturePair) tp2;
        return temperaturePair.getYearMonth().compareTo(temperaturePair2.getYearMonth());
    }
}

二次ソートジョブを実行した結果は次のとおりです。

new-Host-2:sbin bbejeck$ hdfs dfs -cat secondary-sort/part-r-00000

190101 -206

190102 -333

190103 -272

190104 -61

190105 -33

190106 44

190107 72

190108 44

190109 17

190110 -33

190111 -217

190112 -300

データを値で並べ替えることは一般的なニーズではないかもしれませんが、必要なときにバックポケットに入れておくと便利なツールです。また、カスタムパーティショナーとグループパーティショナーを操作することで、Hadoopの内部動作をより深く見ることができました。このリンクも参照してください。hadoop map reduceでのグループ化コンパレーターの使用法

16
Deepika C P

ダイアグラムの助けを借りて特定の概念を理解するのは簡単だと思いますが、これは確かにそれらの1つです。

2次ソートは、姓と名から作成された複合キーに基づいていると仮定しましょう。

Composite Key

複合キーが邪魔にならないようになったので、2次ソートメカニズムを見てみましょう

Secondary Sorting Steps

パーティショナーとグループコンパレータはナチュラルキーのみを使用し、パーティショナーはそれを使用して、同じナチュラルキーを持つすべてのレコードを単一のレデューサーに送ります。 この分割はマップフェーズで行われ、さまざまなマップタスクからのデータがレデューサーによって受信され、グループ化されてから、reduceメソッドに送信されますnotがカスタムグループコンパレーターを指定した場合、Hadoopは複合キー全体を考慮したデフォルトの実装を使用します。誤った結果。

MRステップの概要

enter image description here

46
Sudarshan

パーティショナーは、1つのレデューサーがキーに属するすべてのレコードを受け取ることを保証するだけですが、レデューサーがパーティション内のキーごとにグループ化するという事実は変更しません。

二次ソートの場合、複合キーを形成し、デフォルトの動作を継続させると、グループ化ロジックはキーが異なると見なします。

したがって、グループ化を制御する必要があります。したがって、複合キーではなく、キーの自然な部分に基づいてグループ化するようにフレームワークに示す必要があります。したがって、グループ化コンパレーターを同じものに使用する必要があります。

1
Raghavi Ravi

上記の例には説明がありますので、簡単に説明します。3つの主要なステップを実行する必要があります。

  1. マップアウトは(Key + Value、Value)でなければなりません
  2. Key&Valueに参加したとき。それでも、値だけでなく元のキーでもソートするメカニズムが必要なので、カスタムコンパレーターを追加します。
  3. 現在、データは元のキーでソートされていますが、このデータをリデューサーに送信した場合、Key + Valueをキーとして使用しているため、特定のキーのすべての値を1つのリデューサーに送信することは保証されません。それを確認するために、グループコンパレータを追加します。
0
abhay