专栏首页Catororyspark 多表 join

spark 多表 join

0. Hash Join(小表Join大表)(传统单机)

  • 两个表都只会扫描一次,时间复杂度O(a+b)
  • 小表加载到内存,提高查找效率
  • 小表映射,大表探测

1.Broadcast Hash Join(小表广播,小表Join大表)(分布式改造)

优点:减少shuffle开销

缺点:只能用于广播较小的表,对driver的内存有占用

2.Shuffle Hash Join(小表,但是广播内存压力大Join大表)(分布式改造)

当一侧的表比较小时,我们选择将其广播出去以避免shuffle,提高性能。但因为被广播的表首先被collect到driver端,然后被冗余分发到每个executor上,所以当表比较大时,采用broadcast join会对driver端和executor端造成较大的压力,所以这种方法。

但由于Spark是一个分布式的计算引擎,可以通过分区的形式将大批量的数据划分成n份较小的数据集进行并行计算。这种思想应用到Join上便是Shuffle Hash Join了。利用key相同必然分区相同的这个原理,SparkSQL将较大表的join分而治之,先将表划分成n个分区,再对两个表中相对应分区的数据分别进行Hash Join,这样即在一定程度上减少了driver广播一侧表的压力,也减少了executor端取整张被广播表的内存消耗。

1. shuffle阶段:分别将两个表按照join key进行分区,将相同join key的记录重分布到同一节点,两张表的数据会被重分布到集群中所有节点。这个过程称为shuffle

2. hash join阶段:每个分区节点上的数据单独执行单机hash join算法。

优点:减少driver和executor的内存压力,提升稳定性

3.Sort Merge Join(大表Join大表)

1. shuffle阶段:将两张大表根据join key进行重新分区,两张表数据会分布到整个集群,以便分布式并行处理;

2. sort阶段:对单个分区节点的两表数据,分别进行排序;

3. merge阶段:对排好序的两张分区表数据执行join操作。join操作很简单,分别遍历两个有序序列,碰到相同join key就merge输出,否则取更小一边,

总体而言,传统数据库单机模式做Join的场景毕竟有限,也建议尽量减少使用Join。然而大数据领域就完全不同,Join是标配,OLAP业务根本无法离开表与表之间的关联,对Join的支持成熟度一定程度上决定了系统的性能,夸张点说,“得Join者得天下”

https://www.cnblogs.com/0xcafedaddy/p/7614299.html

原文链接:https://www.cnblogs.com/0xcafedaddy/p/7614299.html

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kafka Exactly Once实现原理

      上面3种EOS语义有着不同的应用范围,幂等producr只能保证单分区上无重复消息;事务可以保证多分区写入消息的完整性;而流处理EOS保证的是端到端(E2E...

    用户6404053
  • spark Pi && word count计算

    2.随机向正方形内随机找n个点,计算每一个点到圆心的距离,小于1的就是圆内的点,假设数量是count

    用户6404053
  • Java8中的接口和抽象类的区别

    今天跑了好远去面试,面试官问了上面这个问题,我是一脸懵比,抽象类我自己没写过,JAVA8对接口有什么修改完全没印象,现在来总结一下,至少下次再遇到这个问题要答上...

    用户6404053
  • 详解股票买卖算法的最优解(二)

    本文作为补充文章,对更复杂的题目进行解答,如果还没有阅读上篇文章,希望小伙伴们先去看一下上篇文章:详解股票买卖算法的最优解(一),有助于理解。

    HUC思梦
  • 详解股票买卖算法的最优解(一)

    主要用的技巧是“状态机”,那么什么是“状态机”呢?没听过的小伙伴会觉得它很高大尚,但今天我们讨论过后,你会发现其实它就是那么回事。

    HUC思梦
  • Minimum Falling Path Sum

    Given a square array of integers A, we want the minimum sum of a falling paththr...

    卡尔曼和玻尔兹曼谁曼
  • Leetcode 516. 最长回文子序列

    输入:"bbbab" 输出:4 解释: 一个可能的最长回文子序列为 "bbbb"。

    zhipingChen
  • 漫画:BAT必考题目 (如何压缩状态完成不同路径题目)

    不同路径:一个机器人位于一个 m x n 网格的左上角,起始点在下图中标记为“Start”。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,在下...

    程序员小浩
  • LeetCode 123. 买卖股票的最佳时机 III(动态规划)

    Michael阿明
  • 动态规划:不同路径还不够,要有障碍!

    题目链接:https://leetcode-cn.com/problems/unique-paths-ii/

    代码随想录

扫码关注云+社区

领取腾讯云代金券