SparkSQL概述
1. SparkSQL概述
1.1 SparkSQL是什么
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g7Xrat4M-1655396200675)(assets/1653210188965.png)]
-
Spark SQL是Spark用于结构化数据(structured data)处理的Spark模块。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EB5w3gRG-1655396200677)(assets/1653223225529.png)]
1.2 为什么有SparkSQL
1.2.1 概述
-
SparkCore:RDD -> 取代 MapReduce (更多使用Hive,编写SQL)
-
Shark
(Hive on Spark) -> 取代Hive-
Hive底层默认是MapReduce,当SparkCore出现以后,能否将Hive底层变为RDD
-
Shark框架:将Hive框架源码拿过来,仅仅修改部分源码 -> SQL转换为RDD,并不是MR,此时Shark框架更多依赖Hive框架
- 问题一:Hive框架版本升级,有新功能,Shark 需要升级
- 问题二:Spark框架版本升级,有新功能,Shark需要升级
-
从2014年5月全球Spark Summit大会之上,终止Shark开发,自己实现依赖Hive框架代码的所有功能,称为Catalyst。
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-liktjJ67-1655396200677)(assets/1653223510145.png)]
1.2.2 Hive and SparkSQL
-
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引擎上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d8STGvrX-1655396200678)(assets/1653210397496.png)]
-
Shark的出现,使得SQL-on-Hadoop的性能比Hive有了10-100倍的提高。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8QbZ98ie-1655396200679)(assets/1653210464108.png)]
1.2.3 SparkSQL历史
- 随着Spark的发展,对于野心勃勃的Spark团队来说,Shark对于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的语法解析器、分析器还是优化器都可以重新定义,进行扩展。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5HItjsu-1655396200680)(assets/1653211024055.png)]
1.2.4 SparkSQL和Hive on Spark
-
2014年6月1日Shark项目和SparkSQL项目的主持人Reynold Xin宣布:停止对Shark的开发,团队将所有资源放SparkSQL项目上,至此,Shark的发展画上了句话,但也因此发展出两个支线:SparkSQL和Hive on Spark。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VWSlG6Nk-1655396200681)(assets/clip_image002.jpg)]
其中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
- DataFrame
- DataSet
2. SparkSQL特点
2.1 易整合
- 无缝的整合了 SQL 查询和 Spark 编程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-byIKjDyR-1655396200682)(assets/1653211772545.png)]
2.2 统一的数据访问
-
使用相同的方式连接不同的数据源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8dtjOQbJ-1655396200683)(assets/1653211805679.png)]
2.3 兼容Hive
-
在已有的仓库上直接运行 SQL 或者 HiveQL
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VxGBtVno-1655396200684)(assets/1653211846140.png)]
2.4 标准数据连接
-
通过 JDBC 或者 ODBC 来连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-buq0Ug6w-1655396200684)(assets/1653211878768.png)]