mapreduce流程中的几个关键点

MapReduce中数据流动
   (1)最简单的过程:  map - reduce
   (2)定制了partitioner以将map的结果送往指定reducer的过程: map - partition - reduce
   (3)增加了在本地先进性一次reduce(优化)过程: map - combin(本地reduce) - partition -reduce

map函数的处理结果放在内存中,这个内存也称为环形缓冲区,缓冲区达到80%的时候会形成溢写,一边向磁盘写入,一般接受map输出,具体流程是一个管道机制

map  数据  先写入缓冲区在内部排序,当达到一定的大小再写入磁盘。如果每次都要写入,那消耗太大,不实际。缓冲期的大小是调优的重要方面,当map中间结果很大,适当调大缓冲区

combiner流程再此之前

所有的map处理完成之后才会执行reduce吗?
答案:否,reduce会执行一个预处理,reduce预处理已经处理完毕的map节点 ,比如进行数据整理

等所有的数据过来 才开始真正的reduce计算

buffer缓冲区满了(80%)就往磁盘写的那个过程叫做溢写。

分区的目的是根据Key值决定Mapper的输出记录被送到哪一个Reducer上去处理。而分组的就比较好理解了。分组就是与记录的Key相关。在同一个分区里面,具有相同Key值的记录是属于同一个分组的。

对于一般的键,只需要key值相同,则对应的value就会分配至同一个 reduce中;
对于复合键,形式为TextPair<key1,key2>,通过控制 key1来进行分区,则具有相同的 key1的值会被划分至同一个分区中,但此时如果 key2不相同,则不同的key2会被划分至不同的分组


原文地址:https://www.cnblogs.com/qiaoyihang/p/6166150.html