Spark SQL概述

Spark SQL是用来处理结构化数据的。可以用连接到很多外部数据源,包括Hive、JSON、JDBC等。
Spark SQL复用了Hive的前端和Metastore。
Spark SQL不仅仅有访问或者操作SQL的功能,还提供了其他的非常丰富的操作:外部数据源、优化等。

  1. Spark SQL的应用并不局限于SQL;
  2. 可以直接访问Hive、Json、parquet等文件的数据;
  3. SQL知识Spark SQL的一个功能而已;
  4. Spark SQL提供了SQL的API,还提供了DataFrame和DataSet的API

Spark SQL架构

Spark SQL概述
输入可以是Hive QL 或者Spark Program 或者 Streaming SQL,如何被Catalyst解析?
首先生成Unresolved Logical Plan,这是未完成的逻辑执行计划,然后与元数据MetaStore中的Schema表信息整合,生成逻辑执行计划。
这个逻辑执行计划是最原始的,之后还会做很多优化,有很多规则作用上去,随后生成优化过后的逻辑执行计划,最终才生成物理执行计划即Spark作业,然后运行。
而Shark中的解析、逻辑执行计划的生成和优化全部都依赖于Hive的。而SparkSQL使用了Catalyst,不依赖于Hive。

SparkSQL的解析过程与Hive解析过程类似的:
SQL 解析成 抽象语法树,然后逻辑执行计划,然后逻辑执行计划进行优化,然后生成物理执行计划,然后形成对应框架的作业,提交到对应的集群。