1. 首先什么是SparkSQL?
- Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。
- 有多种方式去使用Spark SQL,包括SQL、DataFrames API和Datasets API。但无论是哪种API或者是编程语言,它们都是基于同样的执行引擎
- 它是将Spark SQL转换成RDD,然后提交到集群中去运行,执行效率非常快!
2. SparkSQL的几大特性:
- 易整合: 将sql查询与spark程序无缝混合,可以使用java、scala、python、R等语言的API操作。
- 统一的数据访问: 以相同的方式连接到任何数据源。
- 兼容Hive: 支持Hive HQL的语法,兼容hive(元数据库、SQL语法、UDF、序列化、反序列化机制)。
- 标准的数据连接: 可以使用行业标准的JDBC或ODBC连接。
3. SparkSQL的概述
简介:Spark SQL允许开发人员直接处理RDD,同时可以查询在Hive上存储的外部数据。Spark SQL的一个重要特点就是能够统一处理关系表和RDD,使得开发人员可以轻松的使用SQL命令进行外部查询,同时进行更加复杂的数据分析。
发展历程:
关系:
SparkSQL发展:
- 1-Hive(慢-底层基于MapReduce-Tez-Spark)
- 2-Shark(底层执行引擎Spark,大量冗余的Hive代码)
- 3-SparkSQL(重新设计了SQL的执行流程,200种优化)
- Spark3.0中有大量SQL的改变
3.1 DataFrame
- 总结:
DataFrame ==> RDD - 泛型 + Schema + 方便的SQL操作 + 优化
DataFrame是特殊的RDD
DataFrame是一个分布式的表
3.2 DataSet
● 总结:
Dateset ==> DataFrame + 泛型
Dateset ==> RDD + Schema + 方便的SQL操作 + 优化
Dateset是特殊的DataFrame、DataFrame是特殊的RDD
Dateset是一个分布式的表
3.3 RDD、DataFrame、DataSet的区别
- 三者结构图解
- 数据图解
- 总结:
- DataFrame = RDD - 泛型 + Schema + SQL + 优化
- DataSet = DataFrame + 泛型
- DataSet = RDD + Schema + SQL + 优化
- DataFrame = DataSet[Row]
4. SparkSQL与HiveSQL的关系
- Hive(SQL on Hadoop)是大数据生态系统中第一个SQL框架,架构如下所示:
- 底层依赖的MapReduce 所以计算起来很慢
- Shark(Hive on Spark),把HQL翻译成Spark上对应的RDD操作,Shark继承了大量的Hive代码
- 基于前面的问题诞生了SparkSQL(新的技术都是基于就得技术有问题才诞生的)
- 数据结构: DataFrame和DataSet