Spark学习笔记【shuffle】

本文基本上是大数据处理框架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哈希)

参考文档

spark源码之shuffleManager

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值