赞
踩
在很多情况下,开发工程师并不了解Scala语言,也不了解Spark常用API,但又非常想要使用Spark框架提供的强大的数据分析能力。Spark的开发工程师们考虑到了这个问题,利用SQL语言的语法简洁、学习门槛低以及在编程语言普及程度和流行程度高等诸多优势,从而开发了Spark SQL模块,通过Spark SQL,开发人员能够通过使用SQL语句,实现对结构化数据的处理。本章将针对Spark SQL的基本原理、使用方式进行详细讲解。
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象结构叫做DataFrame的数据模型(即带有Schema信息的RDD),Spark SQL作为分布式SQL查询引擎,让用户可以通过SQL、DataFrames API和Datasets API三种方式实现对结构化数据的处理。但无论是哪种API或者是编程语言,它们都是基于同样的执行引擎,因此可以在不同的API之间进行随意切换。
Spark SQL的前身是Shark,Shark最初是伯克利实验室Spark生态系统的组件之一,其运行在Spark系统之上,Shark重用了Hive的工作机制,并直接继承了Hive的各个组件,但由于Shark过于依赖Hive,因此在版本迭代时很难添加新的优化策略,从而限制了Spark的发展,在2014年,Shark停止了维护,转向Spark SQL开发。Spark SQL主要提供了以下三个功能:
(1)Spark SQL可以从各种结构化数据源(例如JSON、Hive、Parquet等)中读取数据,进行数据分析。
(2) Spark SQL包含行业标准的JDBC和ODBC连接方式,因此它不局限于在Spark程序内使用SQL语句进行查询。
(3) Spark SQL可以无缝地将SQL查询与Spark程序进行结合,它能够将结构化数据作为Spark中的分布式数据集(RDD)进行查询,在Python、Scala和Java中均集成了相关API,这种紧密的集成方式能够轻松地运行SQL查询以及复杂的分析算法。
总体来说,Spark SQL支持多种数据源的查询和加载,兼容HQL、可以使用JDBC/ODBC的连接方式来执行SQL语句,它为Spark框架在结构化数据分析方面提供重要技术支持。
Spark SQL兼容Hive,这是因为Spark SQL架构与Hive底层结构相似,Spark SQL复用了Hive提供的元数据仓库(Metastore) ,HiveQL、用户自定义函数(UDF)以及序列化和反序列工具(SerDes)。
Spark SQL架构与Hive架构相比,把底层的MapReduce执行引擎更改为Spark,还修改了Catalyst优化器,Spark SQL快速的计算效率得益于Catalyst优化器。从HiveQL被解析成语法抽象树起,执行计划生成和优化的工作全部交给Spark SQL的Catalyst优化器进行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。