共计 603 个字符,预计需要花费 2 分钟才能阅读完成。
MR 原语:map + reduce
map 数量由什么确定?
- map — split 与 split 片数量一一对应
- block 块是真正被切割开的物理块,
- split 片是在 block 块根底上再切割的逻辑片,由 block 块决定
- 一个 job 作业中 map 数量与 split 片数量无关
- map 拿到数据后进行两头集映射 (K,V), 同时生成分区 partition 编号
reduce 数量由什么决定?
- 惯例:一个 K 对应一个 reduce
- 也能够把多个 K 对应到一个 reduce,然而不能把一个 K 对应多个 reduce(雷同的 K 必须交给同一个 reduce)
- 先获取 split 片,交给 map(默认 split 片大小 == block 块大小,128M)
map 映射成(K,V)两头集后,先将数据写入 内存缓冲区buffer in memory
- 一次排序:在缓冲区中依照 分区 partition(有几个 reduce 就有几个分区 partition)进行排序,雷同分区的数据放在一起
- 二次排序:分区内依照 K 进行排序,雷同的 K 放到一起(一个 reduce 可能对应多个 K)
- 数据压缩 combiner:在 map 端进行一次迭代计算后再发送给 reduce 缩小 reduce 计算量
内存缓冲区写满后,先译写成小文件存到磁盘,当 map 数据处理完之后会造成一堆小文件,
- 三次排序:泛滥小文件 还要进行排序,并合并成大文件
- 四次排序:泛滥 map产生的大文件再进行排序,合并成更大的文件
- 最初合并成的更大的文件交给 reduce 解决
正文完