mapreduce程序5个阶段
input
map
shuffle
reduce
output
shuffle过程实现的功能
分区:
决定当前的key交给那个reduce进行处理
相同的key,必须由同一个reduce进行处理
默认情况下:根据key的hash值 对reduce个数取余
分组:
将相同key的value进行合并
key相等的话,将分到同一个组里
mapreduce阶段,一行调用一次map方法,一种key调用一次reduce方法
排序:
安装key的字典顺序进行排序
详细的过程:
-》map端的shuffle
-》spill:溢写
-》每一个map处理之后的结果将会进入环形缓冲区(内存:100M)
-》分区:对每一条keyvalue进行分区(打标签)
hadoop 1 reduce0
hive 1 reduce1
hbase 1 reduce1
spark 1 reduce1
hadoop 1 reduce0
-》排序 :将相同分区的数据进行分区内排序
hadoop 1 reduce0
hadoop 1 reduce0
hive 1 reduce1
hbase 1 reduce1
spark 1 reduce1
-》当环形缓存区达到阈值80%,开始溢写
将分区排序后的数据溢写道磁盘变成文件file1
最终会生产多个小文件
-》merge合并:将spill生产的小文件合并
-》排序:将相同分区的数据进行排序
file1
hadoop 1 reduce0
hadoop 1 reduce0
hive 1 reduce1
hbase 1 reduce1
spark 1 reduce1
file2
hadoop 1 reduce0
hadoop 1 reduce0
hive 1 reduce1
hbase 1 reduce1
spark 1 reduce1
endfile
hadoop 1 reduce0
hadoop 1 reduce0
hadoop 1 reduce0
hadoop 1 reduce0
hive 1 reduce1
hive 1 reduce1
hbase 1 reduce1
hbase 1 reduce1
spark 1 reduce1
spark 1 reduce1
--》map task结束,通过app master,appmaster通知reduce过来拉取数据
-》reduce端shuffle
-》
maptask-1
hadoop 1 reduce0
hadoop 1 reduce0
hadoop 1 reduce0
hadoop 1 reduce0
hbase 1 reduce1
hbase 1 reduce1
hive 1 reduce1
hive 1 reduce1
spark 1 reduce1
spark 1 reduce1
maptask-2
hadoop 1 reduce0
hadoop 1 reduce0
hadoop 1 reduce0
hadoop 1 reduce0
hbase 1 reduce1
hbase 1 reduce1
hive 1 reduce1
hive 1 reduce1
spark 1 reduce1
spark 1 reduce1
-》reduce启动多个线程通过网络到每台机器上去拉取属于自己分支的数据
reduce1:
hbase 1 reduce1
hbase 1 reduce1
hive 1 reduce1
hive 1 reduce1
spark 1 reduce1
spark 1 reduce1
hbase 1 reduce1
hbase 1 reduce1
hive 1 reduce1
hive 1 reduce1
spark 1 reduce1
spark 1 reduce1
=》merge合并:将每个map task的结果中属于自己分区的数据进行合并
-》排序:将整体属于我分区的数据进行排序
hbase 1 reduce1
hbase 1 reduce1
hbase 1 reduce1
hbase 1 reduce1
hive 1 reduce1
hive 1 reduce1
hive 1 reduce1
hive 1 reduce1
spark 1 reduce1
spark 1 reduce1
spark 1 reduce1
spark 1 reduce1
-》分组:对相同的key的value进行合并
hbase ,list<1,1,1,1>
hive ,list <1,1,1,1>
spark ,list<1,1,1,1>