这是我参与「第四届青训营」笔记创作的第6天
大数据Shuffle原理与实践
- Shuffle概述
- MapReduce概述
- Shuffle阶段:在map的基础上进行数据移动,为后续的reduce作准备
- Reduce阶段:对移动后的数据进行处理,但依然是在单机上处理小数据
- shuffle重要的原因:
-
- M*R次网络连接
-
- 大量的数据移动
-
- 数据丢失风险
-
- 可能存在的大量排序操作
-
- 大量的数据序列化、反序列化操作
-
- 数据压缩
- shuffle都是优化的重点!!
- Shuffle算子
- 算子内部的依赖关系
- shuffle dependency构造
- Partitioner
-
- aggregator:createCombiner:只有一个value的时候初始化的方法
-
- mergeValue:合并一个value到Aggregator
-
- mergeCombiners:合并两个Aggregator
- Shuffle过程
- Hash Shuffle:写数据--每个partition会映射到一个独立的文件
- 每个task生成一个包含所有partition数据的文件
- 每个reduce task分别获取所有map task生成的属于自己的片段
- shuffle过程的触发流程
- shuffle handle
- shuffle handle与shuffle writer的对应
- reader与writer的实现
- shuffle 优化实用技术:Zero Copy,Netty Zero Copy
- 常见的问题:数据无备份,IO并发,IO吞吐,GC频繁,影响NodeManager
- Push shuffle
- 原因:Avg IO size 太小,造成大量的随机IO,严重影响磁盘吞吐;M*R 次读请求,造成大量的网络连接,影响稳定性
- Push shuffle 的实现:
-
- Facebook:cosco
-
- Linkedln: magnet
- magnet实现原理: