Spark Exchange节点和Partitioning

​Exchange

在explain时,常看到Exchange节点,这个节点其实就是发生了数据交换

此图片来自于网络截取

BroadcastExchangeExec 主要是用来广播的

ShuffleExchangeExec 里面决定了数据分布的方式和采用哪种shuffle

在这里可以看到好几种不同的分区器

shufleManager创建不同的shuffle方式

Distribution与Partitioning

Distribution与Partitioning关联,定义了数据在集群各个节点上的分布情况

Distribution:

有6个子类

Partitioning和对应的子类

Distribution子类描述算子示例

调用createPartitioning()方法

UnspecifiedDistribution

未指定分布,无需确定数据元组之间的位置关系

抛出异常

AllTuples

只有一个分区,所有的数据元组存放在一起

例如GlobalLimit算子

SinglePartition

BroadcastDistribution广播分布,数据会广播到所有节点上,构造参数mode为广播模式(BroadcastMode)例如Broadcast的Join操作中的requiredChildDistribution为[BroadcastDistribution(mode)]

BroadcastPartitioning

ClusteredDistribution构造参数clustering是Seq[Expression]类型,起到哈希函数的效果,经过clustering之后,相同的value数据会放到一个分区中例如SortAggregateExec类型的Join操作中的requiredChildDistribution就是ClusteredDistribution(exprs)

HashPartitioning

HashClusteredDistribution

3.3 移出

构造参数expressions是Seq[Expression]类型,起到哈希函数的效果,经过expressions之后,相同的value数据会放到一个分区中例如SortMerge类型的Join操作中的requiredChildDistribution就是[HashClusteredDistribution(leftKeys), HashClusteredDistribution(reghtKeys)]

HashPartitioning

OrderedDistribution构造参数ordering是Seq[SortOrder]类型,数据会根据ordering计算后的结果排序例如在全局的Sort算子中,requiredChildDistribution就是[OrderedDistribution(sortOrder)]

RangePartitioning

StatefulOpClusteredDistribution

3.3 新增

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

orange大数据技术探索者

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值