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]