大数据 Shuffle 原理与实践| 青训营笔记

82 阅读2分钟

  这是我参与「第四届青训营 」笔记创作活动的的第14天。本篇笔记对于7.27日魏中佳老师讲授的《大数据 Shuffle 原理与实践》的内容做一个复习总结。


概述
  • 引入:MapReduce 三阶段
    • Map:单机上小块数据计算
    • Shuffle:进行数据移动,同类要计算的数据放一起
    • Reduce:单机上对移动后数据进行计算处理

image.png

  • Shuffle 的重要性
    • 每个 Reduce 都要访问 Map 数据,产生 M * R 次网络连接(以及对应的网络请求)
    • 大量的数据移动,M * R
    • 数据有丢失风险,需要重算
    • 可能需要大量的排序操作
    • 数据的处理和移动可能存在大量序列化和反序列化的操作(数据和二进制流到文件的转化等等)
    • 数据的压缩和解压

  • 综上,shuffle 表示了不同分区数据交换的过程,不同的 shuffle 性能差异较大,是优化的重点。在 spark 框架中,shuffle 是支持其大规模复杂数据处理的基石

Shuffle 算子

待补充


Shuffle 过程
  • Hash Shuffle:不同的 partition 写到不同的文件中,每一个 maptask 给每一个 partition 创建一个 buffer,写满后 flash 到磁盘,最终会生成 M * R 个,文件系统压力大(产生和同时打开)
  • Hash Shuffle 的写数据优化:合并机制,复用 buffer,有多少个 CPU 只对应相同数量的 buffer,最终生成 C * R 个,但是解决问题不根本
  • Sort Shuffle:所有数据写在一个 buffer,内存满时,排序方式将相同 partition 数据放在一起。排序消耗 CPU 更多,每个 Task 创建 1 + 1 个文件(有一个 index file,记录每个 file segment 的偏移量)
  • 两者的读数据基本一致:每个 reduceTask 分别读取所有 maptask 生成的属于自己的数据
  • Shuffle 的触发流程: