sparksql 操作hive_三十六、图解SparkSQL运行原理

b386e7d488407bce4b9e7e79b0665c3b.png

SparkSQL运行原理

1.SparkSQL的运行简化流程

  • 进行DataFrame|Dataset|SQL编程;
  • Spark会将编写的代码转换并生成一个逻辑计划;
  • Spark会将此逻辑计算转换生成一个重计划,同时在底层以执行的代码进行优化;
  • Spark将这个优化了的物理计划提交到集群上执行,底层上是基于RDD的操作;

2.SparkSQL核心组件

SparkSQL是Spark的核心模块之一,通过查看源码中的sql模块发现,它主要由四大部分组成(core, catalyst, hive和hive-thriftserver),它支持SQL查询和DataFrame API。SparkSQL的核心是Catalyst优化器。

705d01292e42580e153c90e5d2fef0fd.png

SparkSQL四大模块

bb82ac8c4181bf4face52cbb9e0022cb.png

源码

  • core: 负责处理数据的输入与输出,可以从不同的数据源获取数据转换为DataFrame/Dataset;
  • catalyst: Spark中的优化器,负责处理查询语句的处理,包括SQL解析、逻辑计划、优化、物理计划等;
  • hive:兼容Hive, 支持对Hive数据的处理;
  • hive-thriftserver: 提供客户端和JDBC/ODBC连接;

3.Spark优化器catalyst

SparkSQL会先将SQL语句进行解析形成一个树(Tree), 然后使用Rule对Tree进行绑定,优化等处理,通过模式匹配对不同类型的节点采用不同的操作。

而SparkSQL的查询优化器是catalyst, 它负责语句的解析(parse), 绑定,优化和根据逻辑执行计划生成物理执行计划等过程,catalyst是SparkSQL最核心的部分。

6f776df1731997ee6bde7f5df7f16aca.png

catalyst

4.SparkSQL运行原理

  1. 使用SessionCatalog保存元数据

SparkSQL在解析SQL前需要初始化SparkSession, 它定义了SparkSQL的切入点,在输入SQL前会加载SessionCatalog, 初始化SparkSession时会把元数据保存在SessionCatalog中,包括库名,表名,字段,字段类型,是否可以为空等,这些元数据将会在解析未绑定的逻辑计划上使用到。

  1. 使用Antlr生成未绑定的逻辑计划(Logical Plans)

Spark2.0版本起使用Antlr进行词法和语法解析,Antlr会构建一个按照关键字生成的语法树,也就是生成的未绑定的逻辑计划。

  1. 使用Analyzer绑定逻辑计划

在这个阶段Analyzer 使用Analysis Rules,结合SessionCatalog元数据,对未绑定的逻辑计划进行解析,生成已绑定的逻辑计划。

  1. 使用Optimizer优化逻辑计划

Optimizer(优化器)的实现和处理方式同Analyzer类似,在该类中定义一系列Rule,利用这些Rule对逻辑计划和Expression进行迭代处理,达到树的节点的合并和优化。

  1. 使用SparkPlanner生成可执行计划的物理计划

SparkPlanner使用Planning Strategies对优化的逻辑计划进行转化,生成可执行的物理计划。

  1. 使用QueryExecution执行物理计划

5.SparkSQL运行图解

ab3de48908582773d5119b9b21b62a4d.png

Spark运行图解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值