Spark广播变量之大表left join小表时如何进行优化以及小表的正确位置放置,带着这个目标我们一探究竟。

项目场景:

最近工作中遇到一个场景:
有一个超大表3.5T和一个小表963K
需要做关联查询,使用到广播变量,广播小表数据,left join后接小表。
领提出优化,说小表在左left join可以执行效率,我提出了反对意见,为了验证领导所说的对与错,专门进行了测试


问题描述:

首先使用一个300M的表和10k的表进行测试, left join 将小表在右进行广播

sparkSQL-执行计划如下:


可以看出是BroadcastHashJoin,
使用这个 Join 策略必须满足以下条件:
•小表的数据必须很小,可以通过 spark.sql.autoBroadcastJoinThreshold 参数来配置,默认是 10MB,如果你的内存比较大,可以将这个阈值适当加大;如果将 spark.sql.autoBroadcastJoinThreshold 参数设置为 -1,可以关闭 BHJ;
•只能用于等值 Join,不要求参与 Join 的 keys 可排序;
•除了 full outer joins ,支持所有的 Join 类型。
物理计划如下:

下面进行 left join,把小表放在左侧进行广播测试

执行计划是没有广播数据,而是进行了SortMergeJoin,也是对两张表参与 Join 的 Keys 使用相同的分区算法和分区数进行分区,目的就是保证相同的 Keys 都落到相同的分区里面,分区完之后再对每个分区按照参与 Join 的 Keys 进行排序,最后 Reduce 端获取两张表相同分区的数据进行 Merge Join
里面使用了 SortMergeJoin,物理计划如下


原因分析:

Broadcast Hash Join 的实现是将小表的数据广播(broadcast)到 Spark 所有的 Executor 端,这个广播过程和我们自己去广播数据没什么区别,先利用 collect 算子将小表的数据从 Executor 端拉到 Driver 端,然后在 Driver 端调用 sparkContext.broadcast 广播到所有 Executor 端;然后在 Executor 端这个广播出去的小表数据会和大表进行 Join 操作,这种 Join 策略避免了 Shuffle 操作。一般而言,使用left join时会将广播后的表放在右侧


Spark广播变量之超大表left join小表时如何进行优化以及小表的正确位置相关推荐

  1. Spark广播变量实现原理及基础编程

    Spark广播变量实现原理及基础编程 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的 ...

  2. Spark广播变量使用示例

    Spark广播变量使用示例 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的只读查询表 ...

  3. Spark广播变量Broadcast

    注意:原文出处https://www.jianshu.com/p/3bd18acd2f7f Broadcast 顾名思义,broadcast 就是将数据从一个节点发送到其他各个节点上去.这样的场景很多 ...

  4. spark广播变量的原理_spark使用广播变量

    import java.io.{File, FileReader} import java.util import org.apache.spark.SparkConf import org.apac ...

  5. spark 广播变量大数据_Spark基础知识(三)--- Spark的广播变量和累加器

    在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并且这些 ...

  6. spark广播变量的使用(转)

    环境: ubuntu16.04 64 伪分布式 使用的spark是2.3.1 scala 2.11.8 参考连接: https://blog.csdn.net/android_xue/article/ ...

  7. spark广播变量 和 累加器

    1 为什么使用广播变量 和 累加器 变量存在的问题:在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的 ...

  8. spark学习-Spark广播变量与共享变量(1)

    1,概念 ###1.1 广播变量: 广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量.广播变量可被用于有效地给每个节点一个大输入数据集的副本.Spark还尝试使用高效地广播 ...

  9. Spark 广播变量和累加器

    Spark 的一个核心功能是创建两种特殊类型的变量:广播变量和累加器 广播变量(groadcast varible)为只读变量,它有运行SparkContext的驱动程序创建后发送给参与计算的节点.对 ...

最新文章

  1. svm手写数字识别_KNN 算法实战篇如何识别手写数字
  2. JMS分布式应用程序异步消息解决方案EhCache 高速缓存同步问题
  3. 安卓桌面精灵_小米MIUI安卓Q来啦,超多黑科技!凭啥红米先尝鲜?内附预览图...
  4. gradle wrapper 版本与 android build tool 版本匹配要求
  5. dos盘启动计算机,最新万能 DOS 启动盘制作全攻略(软盘+光盘+U盘+硬盘+NTFS+应急实用工具)...
  6. ipython是一个交互式计算机系统_IPython 1.0发布,强大的Python交互式Shell
  7. VC/MFC程序开启关闭和打开自己或其他软件,更改窗口类
  8. 动态模型之增压暂停【FunTester测试框架】
  9. 斯坦福大学深度学习公开课cs231n学习笔记(8)神经网络学习过程中的检查事项和参数调优
  10. python 实现简单画板_Python图像处理之简单画板实现方法示例
  11. 方舟生存进化mysql_基于MySQL 的 SQL 优化总结_卡盟,辅助
  12. ora01017 linux,Oracle linux 7.5安装oracle 12c dg一直提示ORA-01017
  13. CDA-LEVEL 1 数据分析师一级经验总结
  14. matlab 绘图 模板,【科研绘图】MATLAB可视化代码模板
  15. laravel mysql 事务_laravel框架中的MySQL事务处理 阿星小栈
  16. python爬虫案例:抓取网易新闻
  17. 51单片机中断地址表
  18. 如何快速把多个excel表合并成一个excel表(不熟悉vba及公式的人)
  19. 【JVM系列3】方法重载和方法重写原理分析,看完这篇终于彻底搞懂了
  20. 论文阅读笔记:On the Role of Correlation and Abstraction in Cross-Modal Multimedia Retrieval

热门文章

  1. 【奇奇怪怪bug】Flink 1.10 on yarn ,application 在yarn 显示Running ,webui 显示Failed
  2. vue和elementui是什么关系
  3. C++小工进阶之路 XV(list总结以及deque介绍)
  4. 基于电路模型的生态网络构建流程和相关概念
  5. Login with Vimeo in iOS App using oAuth tutorial
  6. 基于JAVA淮安市教育局职业教研室技能竞赛计算机毕业设计源码+系统+lw文档+部署
  7. Firefox 账号信息同步/登录问题
  8. 中国最牛的“创业帮派”
  9. 数据结构与算法(Java版) | 就让我们来看看几个实际编程中遇到的问题吧!
  10. WebAR开发指南(1)---使用AR.js实现第一个WebAR demo