spark大表join大表

286 阅读1分钟

当参与关联的大表与小表满足如下条件的时候,Shuffle Hash Join 的执行效率,往往比 Spark SQL 默认的 Shuffle Sort Merge Join 更好。 两张表数据分布均匀。 内表所有数据分片,能够完全放入内存。 实际上,这个调优技巧同样适用于“大表 Join 大表”的场景,原因其实很简单,这两个条件与数据表本身的尺寸无关,只与其是否分布均匀有关。不过,为了确保 Shuffle Hash Join 计算的稳定性,我们需要特别注意上面列出的第二个条件,也就是内表所有的数据分片都能够放入内存。 那么问题来了,我们怎么确保第二个条件得以成立呢?其实,只要处理好并行度、并发度与执行内存之间的关系,我们就可以让内表的每一个数据分片都恰好放入执行内存中。简单来说,就是先根据并发度与执行内存,计算出可供每个 Task 消耗的内存上下限,然后结合分布式数据集尺寸与上下限,倒推出与之匹配的并行度。 此文章为4月Day12学习笔记,内容来源于极客时间《gk.link/a/122Bb》