工作常用之Spark调优【一】

本文介绍了SparkSQL在Spark3.0中的重要性,强调理解执行计划对于优化SQL应用的关键性。通过分析执行计划的五个步骤,包括Unresolved、Resolved、Optimized、Physical阶段,解释了HashAggregate、Exchange、Project等运算符的作用,并提供了使用explain方法查看不同模式的执行计划的方法。通过案例实操展示了如何提交Spark任务来观察执行计划。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Explain 查看执行计划
Spark 3.0 大版本发布,Spark SQL 的优化占比将近 50%Spark SQL 取代 Spark Core,成
为新一代的引擎内核,所有其他子框架如 MllibStreaming Graph,都可以共享 Spark
SQL 的性能优化,都能从 Spark 社区对于 Spark SQL 的投入中受益。
要优化 SparkSQL 应用时,一定是要了解 SparkSQL 执行计划的。发现 SQL 执行慢的根
本原因,才能知道应该在哪儿进行优化,是调整 SQL 的编写方式、还是用 Hint、还是调参,
而不是把优化方案拿来试一遍。
1.1 准备测试用表和数据
1、上传 3 log hdfs 新建的 sparkdata 路径
2hive 中创建 sparktuning 数据库
3、执行
spark-submit --master yarn --deploy-mode client --driver-memory 1g --num
executors 3 --executor-cores 2 --executor-memory 4g --class
com.atguigu.sparktuning.utils.InitUtil spark-tuning-1.0-SNAPSHOT-jar
with-dependencies.jar
1.2 基本语法
.explain(mode="xxx")
3.0 开始,explain 方法有一个新的参数 mode,该参数可以指定执行计划展示格式:
explain(mode="simple"):只展示物理执行计划。
explain(mode="extended"):展示物理执行计划和逻辑执行计划。
explain(mode="codegen") :展示要 Codegen 生成的可执行 Java 代码。
explain(mode="cost"):展示优化后的逻辑执行计划以及相关的统计。
explain(mode="formatted"):以分隔的方式输出,它会输出更易读的物理执行计划,
并展示每个节点的详细信息。
1.3 执行计划处理流程

核心的执行过程一共有 5 个步骤:
这些操作和计划都是 Spark SQL 自动处理的,会生成以下计划:
Unresolved 逻辑执行计划:== Parsed Logical Plan ==
Parser 组件检查 SQL 语法上是否有问题,然后生成 Unresolved(未决断)的逻辑计划,
不检查表名、不检查列名。
Resolved 逻辑执行计划:== Analyzed Logical Plan ==
通过访问 Spark 中的 Catalog 存储库来解析验证语义、列名、类型、表名等。
优化后的逻辑执行计划:== Optimized Logical Plan ==
Catalyst 优化器根据各种规则进行优化。
物理执行计划:== Physical Plan ==
1HashAggregate 运算符表示数据聚合,一般 HashAggregate 是成对出现,第一个
HashAggregate 是将执行节点本地的数据进行局部聚合,另一个 HashAggregate
将各个分区的数据进一步进行聚合计算。
2Exchange 运算符其实就是 shuffle,表示需要在集群上移动数据。很多时候
HashAggregate 会以 Exchange 分隔开来。
3Project 运算符是 SQL 中的投影操作,就是选择列(例如:select name, age…)。
4BroadcastHashJoin 运算符表示通过基于广播方式进行 HashJoin
5LocalTableScan 运算符就是全表扫描本地的表。
1.4 案例实操
将提供的代码打成 jar 包,提交到 yarn 运行
spark-submit --master yarn --deploy-mode client --driver-memory 1g --num
executors 3 --executor-cores 2 --executor-memory 4g --class
com.atguigu.sparktuning.explain.ExplainDemo spark-tuning-1.0-SNAPSHOT
jar-with-dependencies.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIMaynor

觉得有用,要个免费的三连可有?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值