Spark执行计划分析与研究

在学习、使用和研究spark的过程中,逐渐会发现:单纯看官方文档对spark参数调优只能解决一小部分的问题,要想进一步的学习spark,进一步调优甚至在spark源码的基础上二次开发,我觉得收益最高的应该是学习执行计划了。因此在研究spark源码之前,学习执行计划 可以对整个spark执行过程、架构设计都有一个初步的认识。然而国内网站各大博客,都没有找到一个相关入门教程,笔者打算利用空余时...
摘要由CSDN通过智能技术生成

在学习、使用和研究spark的过程中,逐渐会发现:单纯看官方文档对spark参数调优只能解决一小部分的问题,要想进一步的学习spark,进一步调优甚至在spark源码的基础上二次开发,我觉得收益最高的应该是学习执行计划了。

因此在研究spark源码之前,学习执行计划 可以对整个spark执行过程、架构设计都有一个初步的认识。

然而国内网站各大博客,都没有找到一个相关入门教程,笔者打算利用空余时间,在学习的同时做一个笔记,分享一下。

 

-------

基础篇:

Spark常用算子:https://blog.csdn.net/zyzzxycj/article/details/82706233

内存模型:https://blog.csdn.net/zyzzxycj/article/details/82740733

RDD&Partition:https://blog.csdn.net/zyzzxycj/article/details/82754411

DAG:https://blog.csdn.net/zyzzxycj/article/details/82734453

hive文件存储类型:https://blog.csdn.net/zyzzxycj/article/details/79267635

-------

Spark执行流程与原理:

https://blog.csdn.net/zyzzxycj/article/details/83788647

-------

1、先从最简单的例子开始 select *

场景:select * from test1(普通表 TextFile、一个partition)

== Physical Plan ==
HiveTableScan [instance_id#2, order_id#3, pt#4], HiveTableRelation `heguozi`.`test1`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [instance_id#2, order_id#3], [pt#4]

解释:HiveTableScan:扫描hive表,[]内为表中的三个字段(包括了表字段+分区字段)

HiveTableRelation:后面跟了库名.表名,HiveLazySimpleSerDe:TextFile默认的序列化器,[]内为表中两个字段,[]内为分区字段

2、count

场景:select count(*) from test1(普通表 TextFile、多个partition)

== Physical Plan ==
*(2) HashAggregate(keys=[], functions=[count(1)])
+- Exchange SinglePartition
   +- *(1) HashAggregate(keys=[], functions=[partial_count(1)])
      +- HiveTableScan HiveTableRelation `heguozi`.`test1`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [instance_id#8, order_id#9], [pt#10]

解释:执行计划自下而上读,这个时候出现了两个stage,执行计划中 *(1)和*(2)为WholeStageCodegenId 这个会在之后的文章中做介绍。

count操作会触发HashAggregate算子,无论有多少个partition,均会产生shuffle。

总dag-graph: 

 

stage1:

stage2:

PS:WholeStageCodegen 是spark2.X的新优化器,参考:https://blog.csdn.net/zyzzxycj/article/details/82745336

3、简单where查询

场景:select * from test1 where order_id='1'

解释:where作为过滤条件,spark只用了filter一个算子,窄依赖,会在一个stage中完成。

dag-graph:

4、group by & join

场景:

SELECT self_
  • 18
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值