渔舟唱晚的天空
——welkinwalker的遐想
  1. map的输入由inputformat定制,这是一个java中的interface。要实现里面的两个方法,一个是inputsplit,recordreader,前者决定了怎么从最初的输入做partition,后者决定了怎么从读inputsplit。
  2. map的数量由inputsplit的数量决定,而reduce的数量则取决于partitioner接口的实现的数量决定。
  3. combine是在map后做的reduce。对于每个map真正的顺序应该是:先map,然后对map的结果根据key做sort,然后再对于sort的结果进行combine。
  4. map后面还包含多个步骤:shuffle--> merge sort --> secondary sort --> reduce。shuffle只负责把数据从各个机器上fetch过来;merge sort是把每个机器上来的数据做归并排序,在这里使用的比较函数 JobConf.setOutputKeyComparatorClass(Class),通常来说是针对整个key做排序的;secondary sort 使用的比较函数是JobConf.setOutputValueGroupingComparator(Class).,用来对于key相同的记录再做分组,每个分组本当做一个reduce函数的输入,如果不做这一步,那么就使用sort后key相同的记录作为一个reduce函数的输入;最后的reduce就是处理上面分组(如果没有secondary sort,则直接使用key分组)处理的结果。

 

 

posted on 2011-12-01 16:13  welkinwalker  阅读(301)  评论(0编辑  收藏  举报