mapreduce关键点:
1、 当一个reduce worker读取了所有的中间数据后,它通过中间key值对缓冲数据排序,以便相同key值的出现组织在一起。由于通常许多不同的key值映射到同一reduce任务上,因此排序是需要的。如果中间数据量太大而无法适应内存,那么就使用外部排序。reduce的输入为(key,list[])list是同一key的value的所有集合
当所有的map和reduce任务完成之后,master唤醒用户程序。此时此刻,用户程序里的对MapReduce调用返回用户代码。
成功完成之后,mapreduce执行的输出可以在R个输出文件中得到(每个文件对应一个reduce任务,文件名由用户指定)。
通常,用户不需要将这R个输出文件合并成一个文件-他们经常把这些文件作为输入传递给另外一个MapReduce调用,或者在另外一个分布式应用中使用它们,
这种分布式应用能够处理分成多个文件的输入。
2、 合并函数在每台执行map任务的机器上执行。通常使用相同的代码实现合并函数和reduce函数。合并函数和reduce函数唯一的区别就是MapReduce库如何处理函数的输出。Reduce函数的输出被写入在最终的输出文件,合并函数的输出被写到中间文件里,该文件被发送给reduce任务
需要提供数据的reader不必从文件中读取,比如,我们可以容易地定义一个从数据库里读记录的reader,或者从映射在内存中的数据结构读。