hadoop mapreduceのソートについて

hadoop の map->reduce 間のソートに関する概念の整理。
用語は私が適当に作った。(象本は参考にしたが)

■パーティション
同じReducerノードにmap出力を割り当てる単位。
通常はmap出力のキー部分で振り分け。
Job#setPartitionerClass で指定したクラスの getPartition メソッドの実装によりカスタマイズできる。

■グループ
reduce メソッドを実行する単位。
通常はランダム?
Job#setGroupingComparatorClass で指定したクラスの compare メソッドの実装によりカスタマイズできる。

■ソートキー
reduceメソッドのインプットがソートされるキー
通常はmap出力のキー部分でソート。
ソートロジックをカスタマイズすることも可能。以下のいずれかで実装。
・Keyクラスの compareTo メソッド
・Job#setSortComparatorClass (実体は"mapred.output.key.comparator.class")で指定したクラスの compare メソッド


使い方の例
○reduce の実行単位、実行順は気にしない
そもそもreduce 要らなくね?

○カラムAの値が同じものは同じノードで実行してほしい。
mapのアウトプットのキーにカラムAを指定。

○カラムAの値毎にreduce を実行したい。ソート順は気にしない。
mapのアウトプットのキーにカラムAを指定。
Aでグループするように実装。

○カラムAの値毎にreduce を実行し、更にインプットをカラムB順でソートしといてほしい
→セカンダリソート
mapのアウトプットのキーにカラムA+Bを指定。
Aだけでパーティションするように実装。
Aでグループするように実装。
reduce処理の中でBの値も使いたい場合は、Bの値をmap出力のvalueにも入れる(key、valueそれぞれにBを入れる。)