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 新增 |
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/a2ae395ee5.html
