Hadoopで2次ソートがどのように機能するかを説明できますか?
なぜGroupingComparator
を使用する必要があり、hadoopでどのように機能するのですか?
以下のリンクをたどっていましたが、groupcomapatorがどのように機能するのか疑問がありました。
グループ化コンパレーターがどのように機能するか説明できますか?
http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html
グループ化コンパレータ
データがレデューサーに到達すると、すべてのデータがキーでグループ化されます。複合キーがあるため、レコードが自然キーのみでグループ化されていることを確認する必要があります。これは、カスタム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でのグループ化コンパレーターの使用法
ダイアグラムの助けを借りて特定の概念を理解するのは簡単だと思いますが、これは確かにそれらの1つです。
2次ソートは、姓と名から作成された複合キーに基づいていると仮定しましょう。
複合キーが邪魔にならないようになったので、2次ソートメカニズムを見てみましょう
パーティショナーとグループコンパレータはナチュラルキーのみを使用し、パーティショナーはそれを使用して、同じナチュラルキーを持つすべてのレコードを単一のレデューサーに送ります。 この分割はマップフェーズで行われ、さまざまなマップタスクからのデータがレデューサーによって受信され、グループ化されてから、reduceメソッドに送信されます。 notがカスタムグループコンパレーターを指定した場合、Hadoopは複合キー全体を考慮したデフォルトの実装を使用します。誤った結果。
MRステップの概要
パーティショナーは、1つのレデューサーがキーに属するすべてのレコードを受け取ることを保証するだけですが、レデューサーがパーティション内のキーごとにグループ化するという事実は変更しません。
二次ソートの場合、複合キーを形成し、デフォルトの動作を継続させると、グループ化ロジックはキーが異なると見なします。
したがって、グループ化を制御する必要があります。したがって、複合キーではなく、キーの自然な部分に基づいてグループ化するようにフレームワークに示す必要があります。したがって、グループ化コンパレーターを同じものに使用する必要があります。
上記の例には説明がありますので、簡単に説明します。3つの主要なステップを実行する必要があります。