每日日报2021 9/30

具体 Shuffle 过程详解,如下:
(1)MapTask 收集我们的 map()方法输出的 kv 对,放到内存缓冲区中
(2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件
(3)多个溢出文件会被合并成大的溢出文件
(4)在溢出过程及合并的过程中,都要调用 Partitioner 进行分区和针对 key 进行排序
(5)ReduceTask 根据自己的分区号,去各个 MapTask 机器上取相应的结果分区数据
(6)ReduceTask 会抓取到同一个分区的来自不同 MapTask 的结果文件,ReduceTask 会
MapReduce详细工作流程(一)
 
1 待处理文本
/user/input
Mrappmaster
NodeManager
客户端
2 客户端submit()前,获
取待处理数据的信息,然
后根据参数配置,形成一
个任务分配的规划。
ss.txt 0-128
ss.txt 128-200
ss.txt
200m
Job.split
wc.jar
Job.xml
Yarn
RM
InputFormat
MapTask1
Mapper
outputCollector
K,v
map(K,v)
Context.write(k,v)
ss.txt 0-128
3 提交信息
4 计算出MapTask数量
5 默认
TextInputFormat
6 逻辑运算
RecorderReader
K,v
reader()
分区1
分区1
快排
<a,1><c,1>
<b,1><b,1>
9 溢出到文件(分区且区内有序)
<a,1><e,1>
<b,1><f,1>
<a,1><c,1>
<b,2>
<a,1><a,1><c,1><e,1>
<b,1><b,1><b,1><f,1>
<a,2><c,1><e,1>
<b,3><f,1>
10 Merge 归并排序
分区1
分区2
MapTask2
<g,1>
<h,1>
Merge 归并排序
分区1
分区2
… …
ss.txt 128-200
8 分区、排序
11 合并
7 向环形缓冲区
写入<k,v>数据
kvindex
bufindex
<k,v>
kvmeta
默认100M
80%,后反向
分区2
分区2
快排
Combiner合并
索引
数据
… …
index
partition
keystart
valstart
key
value
unsued
Meta
Records 尚硅谷大数据技术之 Hadoop(MapReduce)将这些文件再进行合并(归并排序)
(7)合并成大文件后,Shuffle 的过程也就结束了,后面进入 ReduceTask 的逻辑运算过
程(从文件中取出一个一个的键值对 Group,调用用户自定义的 reduce()方法)
注意:
(1)Shuffle 中的缓冲区大小会影响到 MapReduce 程序的执行效率,原则上说,缓冲区
越大,磁盘 io 的次数越少,执行速度就越快。
(2)缓冲区的大小可以通过参数调整,参数:mapreduce.task.io.sort.mb 默认 100M。
posted @ 2021-09-30 22:53  宋振兴  阅读(73)  评论(0编辑  收藏  举报