Spark SQL总览
概览
Spark SQL是运行在Spark Core之上,用来处理结构化和半结构化数据的一个组件。Spark SQL使用DataFrame(SchemaRDD)/Dataset
作为其数据抽象,并充当这些数据的处理引擎。
具体来说, Spark SQL提供了以下三大功能:
-
Spark SQL 可以从各种结构化的数据源中读取数据。例如:JSON,Hive,Parquet等。
-
Spark SQL 不仅支持在Spark程序中使用SQL语句进行数据查询,也支持从类似商业智能软件Tableau这样的外部工具中通过标准数据库连接器(JDBC/ODBC)连接Spark进行查询。
-
当在Spark程序中使用Spark SQL时,Spark SQL支持SQL与常规的Python/Java/Scala代码高度整合,包括连接RDD与SQL表,公开的自定义SQL函数接口等。
Spark SQL的工作原理
如下图:
.png
其中Catalyst阶段是最为重要的,它的作用是把一个逻辑计划转换成可以执行的物理计划(可能生成多个物理计划),然后由Cost Model评估模型来选择最优方案,最后开始执行。
Spark SQL API
-
SparkContext
SparkContext是Spark的入口,相当于应用程序的main函数。目前在一个JVM进程中可以创建多个SparkContext,但是只能有一个active级别的。如果你需要创建一个新的SparkContext实例,必须先调用stop方法停掉当前active级别的SparkContext实例。 -
SQLContext(Spark1.6有的)
SQLContext是Spark SQL的一个分支入口,可以用来操作SQL -
SparkSession
Spark2.0引入的,提供单个入口点来与底层Spark功能交互,并允许使用DataFrame和Dataset API进行Spark编程。SparkConf、SparkContext和SQLContext都已经被封装在SparkSession当中。 -
DataFrame
Spark SQL的数据抽象,也叫SechemaRDD。 -
Dataset
最新的Spark SQL 数据抽象,结合了RDD的优势(强类型,能使用lambda表达式函数)和
Spark SQL优化执行引擎。 -
HiveContext
继承自SqlContext,用来操作Hive
spark sql with hive.pngSpark SQL & Hive
包含Hive支持的Spark SQL可以支持Hive表访问,UDF,SerDe(序列化格式和反序列化格式),以及Hive查询语言(HQL)。
SparkSQL使用Hive的Meta Store,但是有自己的的Thrift Server