【Spark】Shuffle机制

一 Shuffle机制

运行在不同stage、不同节点上的task如何进行数据传递?这个数据传递过程通常被称为Shuffle机制。
该机制除了数据传递,还负进行各种类型的计算(如聚合、排序等),并且数据量一般会很大。

二 Shuffle面临的一些问题

2.1 map()端数据分区问题

如何确认数据分区个数?
用户可以自定义分区个数。
用户没定义的话,默认分个数是parent RDD的分区个数的最大值。

如何对map()端的输出数据进行分区?
map task输出的每个<K,V>记录,都根据Key值计算起partitionId。

2.2 reduce()端数据聚合问题

利用HashMap数据结构实现,并采用在线聚合方式。

2.3 map()端combine问题

本质上,map()端combine问题与reduce()端数据聚合问题是相似的,不同的是,reduce()端聚合的是所有map task输出的数据,而map()端聚合的是来自单一task输出的数据。

2.4 sort问题

在哪里执行?
reduce()端必须要执行。
如果map()端进行了排序,可以减少reduce()端排序的复杂度。

执行顺序是怎样的?
先聚合再排序。

2.5 内存不足问题

使用内存+磁盘混合存储方案。
先在内存中执行聚合,当内存不够时,将结果spill到磁盘上,空闲出来的内存可以继续处理新数据。
但spill到磁盘上的数据是部分聚合结果,所以为了得到完整的聚合结果,在下一步数据操作前,对磁盘和内存中的数据再次进行聚合,也称为“全局聚合”。为了加快全局聚合,需要将spill到磁盘上的数据进行排序,这样在全局聚合时,才能够按顺序读取spill到磁盘上的数据,从而减少磁盘I/O。

三 Shuffle框架设计

四 Shuffle中涉及到的一些数据结构

五 Shuffle相关的性能调优

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值