Hadoop学習四十三:MapReduceの二次ソート
2337 ワード
一.概要
二次並べ替えの文章については、ネット上に多いです。例えはhttp://www.cnblogs.com/xuxm2007/archive/2011/09/03/2165805.htmlでいいです。この文に基づいていくつかの点を追加します。
二.job.set Parttitionallassはどこで使われますか?
mapperでは毎回writeを呼び出します。
collector.collect(key, value,partitioner.getPartition(key, value, partitions)); partitions = jobContext.getNumReduceTasks();
Parttititionner Classに使用されます。
MapTask writeメソッドライン690を参照してください。
三.job.set SortComprators
ソトAndSpillでトリガします。
sortAndSpillに入るタイミングはmap段階が進行している時のバッファリングのデータはすでに閾値に達しています。あるいはmap段階が終わった後のoutput.close(mapperContext)です。ちなみにMapperのclean方法は、mapの段階で完成しました。以前はmapの段階が終わってから実行すると思っていました。これもなぜ各Mapperの出力が整然としているかの原因であり、Reduce Shuffle段階の準備でもある。
オリジナルファイル
1 1b
1 1a
3 3a
2 2A
2 2a
高速ソート(SortCompratorsを呼び出すcompare方法)を採用しています。生成されたfile.outファイル。一部の文字が表示されていないようです。
11 a 1 a 11 b 1 b 22 A 2 a 33 a 3 a?SU
コードMapTaskライン763
try {
input.initialize(split, mapperContext);
mapper.run(mapperContext);//mapper
mapPhase.complete();
setPhase(TaskStatus.Phase.SORT);
statusUpdate(umbilical);
input.close();// RecordWriter
input = null;
output.close(mapperContext);
output = null;
} finally {
closeQuietly(input);
closeQuietly(output, mapperContext);
}
四.job.set Grouping Comprators
一つのパーティションの下のあれらのvalueを決めて、グループに分けられます。まずhttp://zy19982004.iteye.com/admin/blogs/2037907を読みます。Merge&Sortの段階では、データはきちんとしています。この場合、現在のvalueと次のvalueが等しいかどうかを比較するだけで、同じグループになります。 compareメソッドの戻り値intはあまり意味がないです。nextValueIsSame=reult=0だけ必要です。上記データの呼び出し軌跡は
TextPair [first=1, second=1a] TextPair [first=1, second=1b]
TextPair [first=1, second=1b] TextPair [first=2, second=2A]
TextPair [first=2, second=2A] TextPair [first=2, second=2a]
TextPair [first=2, second=2a] TextPair [first=3, second=3a]