大数据shuffle原理与实践|青训营笔记
这是我参加青训营的第6天
1.1 MapReduce概述
Map阶段:是在单机上对一小块数据进行处理的过程。
Shuffle阶段:在map阶段的基础上,进行数据移动。(把相同颜色的数据放到一起)
Reduce阶段:对移动的数据进行处理,依然是在单机上处理一小份数据。
1.4 Shuffle:会产出M*R次网络连接; 有大量数据移动; 数据在移动和计算的过程中存在丢失的风险; 可能存在大量的排序操作; 数据在处理和移动的过程中,存在序列化和反序列化操作; 数据压缩。
2.1 Shuffle算子分类:repartition;ByKey;join;Distinct.
2.2算子内部的依赖关系。
2.21 ShuffleDependency构造
1.Key-value RDD
2.Partitioner:给定一个key时产生一个特定的分区。
3.Serializer:将一段对象映像为二进制的数据流/将二进制的数据流映射为一段对象
4.Optional key ordering:key不需要排序的falg
5.Optional Aggregator
6.mapsidecombine falg
3.1Hash Shuffle-写数据
每个partition会映射到一个独立的文件中,写满后file到磁盘中,会生成M*R个文件。
优化后,每个partition会映射到文件片段中。
3.2 Sort shuffle-写数据
不再给每个partition一个sorter,所有的的数据都写到一个map task里,当内存满了的时候通过排序,将相同的partition数据放到一起。
3.3 Shuffle-读数据
每个reduce task分别获取所有map task生成的属于自己的片段。
3.4 Shuffle过程的触发流程
当执行collect时会触发Shuffle。
绿色的线不需要cpu参与;红色的线cpu直接参与。 应用:合并文件;发送文件。(不需要将文件拷贝到用户端,直接将文件消息发送到网卡)
3.11 Shuffle优化 避免使用Shuffle;使用broadcast代替join;使用map-side预聚合算子。
3.13 Shuffle倾斜优化 影响:作业运行时间变长;Task OOM导致作业失败。 处理办法:提高并行度
4.Push Shuffle 要解决大量随机读的问题
以上就是我本次笔记的主要内容,不少知识点是第一次接触,用自己的话还没办法总结,就直接上图了,本次编辑是为了提醒自己日后回来复习笔记的。