Spark shuffle

3 篇文章 0 订阅

Shuffle这个词在spark和mr中经常被提及,经常被翻译成『洗牌』、『混洗』,这样翻译并不容易理解,其实可以翻译成『数据重分布』,因为对从事OLAP的同学来说,大家对『重分布』这个概念是熟悉的。

什么是Shuffle

shuffle是Spark用于执行数据重分配的机制,以便对数据实现跨分区重新分组操作。这会导致跨执行器和机器的数据复制,因此它是一个复杂且消耗资源的操作。

为什么需要shuffle

我们以reduceByKey操作为例。reduceByKey操作生成一个新的RDD,其中单个键的所有值都组合成一个元组-(键,针对与该键关联的所有值执行reduce函数后的结果)。挑战在于,单个键对应的所有值并非都正好位于同一分区甚至同一台机器上,但它们必须位于同一位置(节点或执行器里)才能计算出结果。

在Spark中,数据通常不会跨分区分布在特定操作的必要位置。换句话说,通常情况下数据不会提前按照特定操作的需要分布在相应的位置(同一个机器或执行器里)。

在GreenPlum、oceanBase中也是如此,理想状态:执行groupby或join on所需的键就是表的分布键,这样的话,数据已经按照分布键提前集中在一起了,每个分布式计算任务在自己的本地计算节点就能就地取到计算所需的数据,那就不需要跨节点拉取所需数据了。通常情况下,以上理想状态很少出现,即计算所涉及的键正好是分布键的情况很少发生。

这里举个GreenPlum官网的例子:维度表customer表在Segment上通常按照客户的cust_id分布,而事实表sales表通常是按照sale_id分布。为了执行两个表的连接join操作,sales元组必须按照c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只要开始永远不晚

谢谢打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值