Map
- 以一条记录为单位做映射。
- 映射、变换、过滤。
- 1进N出。
- map的数量由切片(split,一般情况下split默认等于hdfs中的block)的数量决定的。
Reduce
- 以一组为单位做计算。(前置条件:分组 key:value k,v是由map来实现的)
- 分解、缩小、归纳。
- 一组进N出。
- (KEY,VAL):键值对的键划分数据的分组。
- reduce的并行度数量由设置来决定。(默认数量为1)
名词关系
- block > split
1:1
N:1
1:N - split > map
1:1 - map > reduce
N:1
N:N
1:1
1:N - group(key) > partition
1:1
N:1
N:N
1:N
MapReduce
数据以一条记录为单位,通过map方法映射k,v,相同的key为一组,这一组数据调用一次reduce方法,在方法内迭代计算这一组数据。
MapTask
- 切片会格式化出记录,以记录为单位调用 map方法。
- map的输出要映射成成KV,KV会参与分区计算,拿着K算出P(分区号),K,V,P。
- MapTask的输出是一个文件,存储在本地的文件系统中。
- 内存缓冲区溢写磁盘时,做一个2次排序:分区有序,且分区内key有序;未来相同的一组key会相邻的排在一起。
- reduce的归并排序其实可以和reduce方法同时发生,尽量减少IO。