青训营第六课Shuffle原理与实践|青训营笔记

59 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第6天

课堂内容

shuffle概述

在开源的MapReduce中有三个过程:Map,Shuffle,Reduce image.png Map:归类 image.png Shuffle:移动 image.png Reduce:计数 image.png

Shuffle算子

分类 image.png 算子之间的关系

image.png Shuffle Dependency的构造

image.png 第一个是【K,V】对;第二个是给定K的分区;第三个是一个二进制的数据流和对象的映射,第四个是用来排序的,第五个是相当于预聚合类似的东西,第六个是一个判断的东西\

  • 两个具体的过程:

image.png

image.png

Shuffle过程

发展历程

image.png

  • Hash Shuffle:主要就是Map Task到Aggregator进行移动,然后写成文件File。每一个partition对应一个独立的文件。这样会生成M*R个文件,就太多了。我们可以优化成每一个partition对应一个文件集/文件片段。

image.png

image.png

  • Sort shuffle:每个task生成一个包含所以partition的数据文件。当File中数据满了就sort排一下序,就好了。

image.png

  • 读数据:读他对应的部分就行。

image.png

  • ShuffleHandle的建立

image.png BypassMergeShuffleWriter:对应hash,适用于partition数量不能太多。 image.png UnsafeShuffleWriter:应用堆外内存所以Unsafe,Long Array用来排序partition的一个功能。不能反序列化,并且partition不能移动。 image.png sortshuffleWriter:支持combine,支持反序列,堆内内存。 image.png

  • shufflehandle和shuffleWriter的关系

image.png

  • Reader的实现:主要是两种请求OpenBlocks请求(本地数据),Chunk请求和stream请求(远程的数据)

image.png

  • ShuffleBlockFetchIterator:好像是上面两种的一个集合,都可以做本地的和远程的。

image.png

shuffle优化

  • zero copy和netty zero copy
    过程 image.png 优点 image.png
  • broadcast:代替jion image.png
  • MapSide预聚合 image.png
  • 参数优化:下面是各种参数 image.png
  • 倾斜优化 image.png
  • Shewjion:优化AQE image.png

Push Shuffle

需要push shuffle的原因:第一Avg IOsize太小,造成了大量的随机IO,严重影响磁盘的吞吐,第二M*R次读请求,造成大量的网络连接,影响稳定性。

image.png
这是各个公司push shuffle的实现,下面我们介绍两个具体的实现:

  • Magnet和Cloud

image.png 你可以理解为他在写完一份本地数据后向远端push一份一样的数据Merge到一个文件里

image.png
这三个是Merge的细节

image.png 这些是Magnet的优点:可靠性的体现

image.png cloud的架构:主要特点CSS Master

image.png 前面是写入,后面是读取。写两遍,有一个错误再写两遍,直到没错。读取的时候会用Mapld/Attemptld/Batch去重。

image.png AQE中partition划分一个大文件的规定:512MB