本文基本上是大数据处理框架Apache Spark设计与实现的Shuffle部分的学习。以及Spark基础知识@Bambrow
Shuffle解决啥问题
上游和下游,不同stage,不同的task之间是如何传递数据的。ShuffleManager管理ShuffleWrite和ShuffleRead
分为两个阶段:
ShuffleWrite
上游stage输出的分区问题。
ShuffleRead
下游stage从上游获取数据,组织数据的问题
涉及到三个操作:
分区
分区是为了让reduce task可以获取相应的数据。
排序
有些算子需要进行排序。比如sortBy().可以在Shuffle机制中,完成排序。
聚合
相同key的结构放到一起,进行计算。
Map端聚合,可以减少Shuffle网络传输。
Shuffle框架的设计和实现
ShuffleWrite
HashShuffleManager(Spark2.0移除):
哈希的方式决定Map端分区文件写入,临时文件命名为shuffle_“+shuffleId+”“+mapId+”"+reduceId,文件公用,追加写入。
缺点在于:
1,临时文件过多(R*C),随机写性能差。
2.写缓冲内存过大。
consolidate 机制可以重用文件,减少临时文件数。
它主要关注的点在于Map端的分区,聚合。
SortShuffleManager
分区,MapTask写缓冲区,Partition内不排序(MR对内按照Key进行排序),溢写文件。完成之后,使用ExternalSorter对临时文件进行排序,合并成一个大文件和索引文件。
数据结构
ShuffleRead
跨节点获取数据,聚合和排序。
谁启动ReadTask,启动多少个线程?
和Hadoop的对比
Shuffle write 排序
Shuffle write 文件数目
Shuffle read 多线程拷贝
read聚合排序 MR归并(已经分区内部有序了),哈希归并(按key哈希)文章来源:https://www.toymoban.com/news/detail-435124.html
参考文档
spark源码之shuffleManager文章来源地址https://www.toymoban.com/news/detail-435124.html
到了这里,关于Spark学习笔记【shuffle】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!