MapReduce——shuffle
Shuffle 过程是 MR 的一个核心。 简答了解 Shuffle 的作用: 需求场景: 在集群环境下,Map task和Reduce task运行在不同的节点上,这个情况下Reduce执行时需要跨节点从其他节点上拉取Map task的输出结果。如果集群上又很多任务在运行,会在运行时消耗很严重的网络资源(这属于正常现象),这种现象无法改变,只能最大化的减少资源的消耗。在数据拉取过程中怎么改变? 1.完整的从Map task 端拉取数据到Reduce端 2.在跨节点拉取数据时,尽可能减少对带宽的不必要消耗 3.减少磁盘IO对Task的影响 shuffle在Map阶段的操作: 整个流程主要分四部:每个map task都有一个内存的缓冲区,存储着map的输出结果。当缓存区快满的时候需要把缓存区的数据以一个临时文件的方式存储放在 磁盘 。当整个map task结束之后再对磁盘中map task产生的文件进行合并,生成最终的输出文件,等待Reduce的拉取。 map阶段只能做 加1 的相加操作 把Map输出结果写入到文件,把key value 进行分组相加 内存缓存区默认 100MB 。如果 map task 的输出结果大于 100M 的时候可能会撑爆内存。所以有一定情况下把临时数据 ( 内存缓存区的数据 ) 写入到磁盘。重新利用这个这块缓存区。内存写入磁盘的过程叫