一MapReduce的执行流程
1、
mapreduce是一种分布式的离线计算框架,是一种编程模型
分为MapTask和ReduceTask两部分
2、作用
用于大规模数据集(大于1t)的并运行算,将自已的程序运行在分布式系统上
3、概念
MapReduce:Map(映射)和Reduce(归纳)
相同的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算
4、计算过程
split:切片
让更多的节点参与到计算
与block的关系是将block再一次进行逻辑上的划分 默认情况下
一个block就是一个split,但是如果block过大 我们通过设置split的大小 如果block过小, 上传之前将文件合并完毕,如果小文件已经上传完毕,将split大一点,可以将多个block合并到一起
这样就可以减少任务数量 提高计算的性能
ps:能等分尽量等分,一个block就是一个切片
5、MapTask
一个split对应一个maptask
取决与当前集群空闲的节点数或者当前block文件大小 如果根据split和块的对应关系,拉取数据到maptask节点的内存,然后进行拆分操作
6、Partitioner
通过对key进行hash计算,可以获取key对应的hash值
在mr启动之前我们已经设置好了reduce的数量
用hash对reduce数量进行取余,我们就可以得到key所对应的reduce落点
7、KVBuffer:环形数据缓冲区
接受maptask的数据写入 效率远远高于直接写入到硬盘
因为一个节点的计算能力不可能完全分配给一个JOB,所以每个KVBuffer的默认大小为100M 当我们写入数据的时候, 如果达到总容量的80%,会产生数据的溢写spell 将这80%的数据生成一个数据文件
8、fetch
reduce从map拉取数据,因为每个数据文件都是按照分组key进行归并排序 我们从所有的datenode节点拉取数据,只读取partition相对应的数据即可 等我们从各个节点拉取完数据之后,就会产生一推小文件 ,而且这堆小文件 也是有序的 然后在通过merge 按照归并算法 将从各个Datenode节点获取的小文件 合并成一个大文件 在按照key进行排序,将来可以一次算出key对应的结果
9、Reduce
相同的key必须是同一个reduce 但一个reduce可以处理多种的key 将合并的大文件进行归并预算,得到最终的结果生成数据文件(每一个reduce生成数据文件最终会被上传到DFS上用户自定义的目录中,方便客户查询)
10、shuffle
shuffle是maper和reduce中间的一个步骤
从maptask的数据传输到reducetask数据传输, 这个过程都可以算是shuffle阶段(洗牌)这种洗牌的效率要高很多