首先是数据的partition, share nothing parallel architecture, 执行task的machine独立,各自处理自己的partition,不需要通信
暴露给用户的控制点只有2个 map function 和 reduce function,但是整个流程包含更多的步骤,(其他的步骤是infrastructure做的)
1)load/partition: 文件写到 hdfs 就完成了,hdfs会分chunck。
2)map:对chunk中的每条记录(key value pairs)执行map function 输出到本地磁盘。
3)combine: optional, 和reducer function 一样,一个chunk/partition中的 map 结果局部reduce。并不是所有的reduce都可以先局部reduce,(需要满足交换律和结合律),combine和reduce一样,是要先排序的。
4)shuffle:把mapper 输出的结果,按key hash到 reduce。reducer知道某个key是否属于自己,会到所有的mapper node的本地磁盘pull自己的key。
5)sort: 排序是为了聚合,把相同的key聚合到一起,便于iterate,这就是为什么reduce function是参数是( key,list of values)
6)reduce: 执行reduce function,输出到hdfs。
分布式系统就是一堆分布式的process,从这个view去看:
有一个master process 负责协调 - JobTracker
map task process:读chunk,parse record,call map function
reduce task process:shuffle(pull from map machine's local disk), sort, and call reducer function