首页技术文章正文

Spark SQL架构详细介绍

更新时间:2022年12月22日 15时27分22秒 来源:黑马程序员

Spark SQL兼容Hive,这是因为Spark SQL架构与Hive底层结构相似,Spark SQL复用了Hive提供的元数据仓库(Metastore)、HiveQL、用户自定义函数(UDF)以及序列化和反序列工具(SerDes),通过下图深入了解Spark SQL底层架构。

1609313018956_Spark.png

Spark SQL机构



从图中可以看出,Spark SQL架构与Hive架构相比,除了把底层的MapReduce执行引擎更改为Spark,还修改了Catalyst优化器,Spark SQL快速的计算效率得益于Catalyst优化器。从HiveQL被解析成语法抽象树起,执行计划生成和优化的工作全部交给Spark SQL的Catalyst优化器负责和管理。

Catalyst优化器是一个新的可扩展的查询优化器,它是基于Scala函数式编程结构的,Spark SQL开发工程师设计可扩展架构主要是为了在今后的版本迭代时,能够轻松地添加新的优化技术和功能,尤其是为了解决大数据生产环境中遇到的问题(例如,针对半结构化数据和高级数据分析),另外,Spark作为开源项目,外部开发人员可以针对项目需求自行扩展Catalyst优化器的功能。下面通过下图描述Spark SQL的运行架构。

1609314803271_Spark-SQL运行架构.png

Spark SQL运行架构

Catalyst优化器在执行计划生成和优化工作时,离不开自己内部的五大组件,介绍如下。

(1)SQLParse:完成SQL语法解析功能,目前只提供了一个简单的SQL解析器。

(2)Analyze:主要完成绑定工作,将不同来源的Unresolved LogicalPlan和元数据进行绑定,生成Resolved LogicalPlan。

(3)Optimizer:对Resolved LogicalPlan进行优化,生成OptimizedLogicalPlan。

(4)Planner:将LogicalPlan转换成PhysicalPlan。

(5)CostModel:主要根据过去的性能统计数据,选择最佳的物理执行计划。

在了解了上述组件的作用后,下面分步骤讲解Spark SQL的工作流程。

1)在解析SQL语句之前,会创建SparkSession,涉及表名、字段名称和字段类型的元数据都将保存在SessionCatalog中;

2)当调用Sparksession的sql()方法时就会使用SparkSqlParser进行SQL语句解析,解析过程中使用ANTLR进行词法解析和语法解析;

3)接着使用Analyzer分析器绑定逻辑计划,在该阶段,Analyzer会使用Analyzer Rules,并结合SessionCatalog,对未绑定的逻辑计划进行解析,生成已绑定的逻辑计划;

4)然后使用 Optimizer优化器优化逻辑计划,该优化器同样定义了一套规则(Rules),利用这些规则对逻辑计划和语句进行迭代处理;

5)接着使用SparkPlanner对优化后的逻辑计划进行转换,生成可以执行的物理计划SparkPlan;

6)最终使用QueryExecution执行物理计划,此时则调用 SparkPlan的execute()方法,返回RDDs。


大数据培训机构

猜你喜欢:
如何理解Spark SQL?Spark SQL有什么功能?

Spark RDD是什么?RDD特征介绍

Spark Streaming是什么?有什么特点?

黑马程序员大数据培训课程



分享到:
在线咨询 我要报名
和我们在线交谈!