Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。
SparkSQL 的前身是 Shark,给熟悉 RDBMS 但又不理解 MapReduce 的技术人员提供快
速上手的工具。
Hive 是早期唯一运行在 Hadoop 上的 SQL-on-Hadoop 工具。但是 MapReduce 计算过程
中大量的中间磁盘落地过程消耗了大量的 I/O,降低的运行效率,为了提高 SQL-on-Hadoop
的效率,大量的 SQL-on-Hadoop 工具开始产生,其中表现较为突出的是:
⚫ Drill
⚫ Impala
⚫ Shark
其中 Shark 是伯克利实验室 Spark 生态环境的组件之一,是基于 Hive 所开发的工具,它修
改了下图所示的右下角的内存管理、物理计划、执行三个模块,并使之能运行在 Spark 引擎
上。

随着 Spark 的发展,对于野心勃勃的 Spark 团队来说,Spark 对于 Hive 的太多依 赖(如采用 Hive 的语法解析器、查询优化器等等),制约了 Spark 的 One Stack Rule Them All 的既定方针,制约了 Spark 各个组件的相互集成,所以提出了 SparkSQL 项目。``SparkSQL 抛弃原有 Shark 的代码,``汲取了 Shark 的一些优点,如内存列存储(In-Memory Columnar Storage)、Hive兼容性等,重新开发了SparkSQL代码;由于摆脱了对Hive的依赖性,SparkSQL 无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便,真可谓“退一步,海阔天 空”。
➢ 数据兼容方面 SparkSQL 不但兼容 Hive,还可以从 RDD、parquet 文件、JSON 文件中
获取数据,未来版本甚至支持获取 RDBMS 数据以及 cassandra 等 NOSQL 数据;
➢ 性能优化方面 除了采取 In-Memory Columnar Storage、byte-code generation 等优化技术
外、将会引进 Cost Model 对查询进行动态评估、获取最佳物理计划等等;
➢ 组件扩展方面 无论是 SQL 的语法解析器、分析器还是优化器都可以重新定义,进行扩
展
**但也因此发 展出两个支线:SparkSQL 和 Hive on Spark**
其中 SparkSQL 作为 Spark 生态的一员继续发展,而不再受限于 Hive,只是兼容 Hive;而 Hive on Spark 是一个 Hive 的发展计划,该计划将 Spark 作为 Hive 的底层引擎之一,也就是 说,Hive 将不再受限于一个引擎,可以采用Map-Reduce、Tez、Spark 等引擎。 对于开发人员来讲,SparkSQL 可以简化 RDD 的开发,提高开发效率,且执行效率非常快,所以实际工作中,基本上采用的就是 SparkSQL。Spark SQL 为了简化 RDD 的开发, 提高开发效率,提供了 2个编程抽象,类似 Spark Core 中的 RDD
地层为了简化RDD的开发、在RDD的上面封装了一层、这样的话他有两个数据模型、封装了新的模型之后、再去做开发底层就做了优化
➢ DataFrame
➢ DataSet
无缝的整合了 SQL 查询和 Spark 编程
使用相同的方式连接不同的数据源

在已有的仓库上直接运行 SQL 或者 HiveQL

通过 JDBC 或者 ODBC 来连接
