Spark广播变量之超大表left join小表时如何进行优化以及小表的正确位置
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小表时如何进行优化以及小表的正确位置相关推荐
- Spark广播变量实现原理及基础编程
Spark广播变量实现原理及基础编程 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的 ...
- Spark广播变量使用示例
Spark广播变量使用示例 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的只读查询表 ...
- Spark广播变量Broadcast
注意:原文出处https://www.jianshu.com/p/3bd18acd2f7f Broadcast 顾名思义,broadcast 就是将数据从一个节点发送到其他各个节点上去.这样的场景很多 ...
- spark广播变量的原理_spark使用广播变量
import java.io.{File, FileReader} import java.util import org.apache.spark.SparkConf import org.apac ...
- spark 广播变量大数据_Spark基础知识(三)--- Spark的广播变量和累加器
在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并且这些 ...
- spark广播变量的使用(转)
环境: ubuntu16.04 64 伪分布式 使用的spark是2.3.1 scala 2.11.8 参考连接: https://blog.csdn.net/android_xue/article/ ...
- spark广播变量 和 累加器
1 为什么使用广播变量 和 累加器 变量存在的问题:在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的 ...
- spark学习-Spark广播变量与共享变量(1)
1,概念 ###1.1 广播变量: 广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量.广播变量可被用于有效地给每个节点一个大输入数据集的副本.Spark还尝试使用高效地广播 ...
- Spark 广播变量和累加器
Spark 的一个核心功能是创建两种特殊类型的变量:广播变量和累加器 广播变量(groadcast varible)为只读变量,它有运行SparkContext的驱动程序创建后发送给参与计算的节点.对 ...
最新文章
- svm手写数字识别_KNN 算法实战篇如何识别手写数字
- JMS分布式应用程序异步消息解决方案EhCache 高速缓存同步问题
- 安卓桌面精灵_小米MIUI安卓Q来啦,超多黑科技!凭啥红米先尝鲜?内附预览图...
- gradle wrapper 版本与 android build tool 版本匹配要求
- dos盘启动计算机,最新万能 DOS 启动盘制作全攻略(软盘+光盘+U盘+硬盘+NTFS+应急实用工具)...
- ipython是一个交互式计算机系统_IPython 1.0发布,强大的Python交互式Shell
- VC/MFC程序开启关闭和打开自己或其他软件,更改窗口类
- 动态模型之增压暂停【FunTester测试框架】
- 斯坦福大学深度学习公开课cs231n学习笔记(8)神经网络学习过程中的检查事项和参数调优
- python 实现简单画板_Python图像处理之简单画板实现方法示例
- 方舟生存进化mysql_基于MySQL 的 SQL 优化总结_卡盟,辅助
- ora01017 linux,Oracle linux 7.5安装oracle 12c dg一直提示ORA-01017
- CDA-LEVEL 1 数据分析师一级经验总结
- matlab 绘图 模板,【科研绘图】MATLAB可视化代码模板
- laravel mysql 事务_laravel框架中的MySQL事务处理 阿星小栈
- python爬虫案例:抓取网易新闻
- 51单片机中断地址表
- 如何快速把多个excel表合并成一个excel表(不熟悉vba及公式的人)
- 【JVM系列3】方法重载和方法重写原理分析,看完这篇终于彻底搞懂了
- 论文阅读笔记:On the Role of Correlation and Abstraction in Cross-Modal Multimedia Retrieval
热门文章
- 【奇奇怪怪bug】Flink 1.10 on yarn ,application 在yarn 显示Running ,webui 显示Failed
- vue和elementui是什么关系
- C++小工进阶之路 XV(list总结以及deque介绍)
- 基于电路模型的生态网络构建流程和相关概念
- Login with Vimeo in iOS App using oAuth tutorial
- 基于JAVA淮安市教育局职业教研室技能竞赛计算机毕业设计源码+系统+lw文档+部署
- Firefox 账号信息同步/登录问题
- 中国最牛的“创业帮派”
- 数据结构与算法(Java版) | 就让我们来看看几个实际编程中遇到的问题吧!
- WebAR开发指南(1)---使用AR.js实现第一个WebAR demo