spark sql(零)总体介绍

一、前言:        

        在使用spark sql时,有许多地方需要阅读源码才能找到解决方式,每次阅读之后记录的东西也比较零碎,对于spark sql一直没有一个全局的认知,故此想整理一个系列文章以加深理解,后面也会将遇到的问题和探查源码进行解决的过程记录下来,以供后续学习参考。因为sparksql内容比较多,如果全面去看所有功能,可能会无处下手,所以我是挑选了我感兴趣的一些点进行的探究。这些点的内容如下:

        1、spark sql(一)源码分析sql解析流程

        2、spark sql(二)sql解析流程扩展

        3、spark sql(三)逻辑计划解析

        4、spark sql(四)物理计划解析(待完成...)

        5、spark sql(五)sparksql支持查询哪些数据源,查询hive与查询mysql的区别

        6、spark sql(六)sparksql自定义数据源

        7、spark sql(七)源码解析 - sparksql什么时候将时间类型转换成整型或者长整型,又是什么时候将整型或长整型转为时间类型?

二、背景

        很早之前,大数据的处理方式通常是编辑mapreduce程序,但是这种开发效率很低,不适合程序员上手。这时发现通用的sql语言底层就对应着数据处理,而且sql的开发效率高、相对于编辑mapreduce程序也更容易上手,于是便有了很多面向大数据生态系统的SQL查询处理技术和框架。如hive、Impala、presto等。后来有的组件感觉直接写sql也不太方便,于是在sql上又封装一层,进而可以通过api调用的方式来实现最终的数据处理。

        早期hive几乎是大数据生态系统中唯一的SQL查询处理可选技术方案。但是Hive有个致命的缺陷,就是它的底层基于MapReduce,而MapReduceshuffle又是基于磁盘的,因此Hive的执行效率比较低下。在这种情况shark项目应运而生。shark底层依赖hive,其只修改内存管理、物理计划、执行三个模块中的部分逻辑,由于其使用spark基于内存的计算模型,因此性能比hive提升了十倍到上百倍。然而shark还是有他的问题,shark底层依赖了hive的语法解析器、查询优化器等组件,而hive于法界性和查询优化等模块本身针对的是mapreduce,这限制了在spark系统上的深度优化和维护。所以在2014年7月1日的spark峰会上,spark团队宣布终止对shark的开发,后续会将重点放在spark sql项目上。此后Spark sql就不只是针对hive中的数据了,而且还可以支持其他数据源的查询。

        Spark 1.0开始推出了spark sqlspark sql的前身是shark,shark项目最初启动于2011年。shark的性能比hive要高出一个数量级,而spark sql的性能又比shark高出一个数量级。

三、功能

        spark sql最大的优势就是其充分利用了spark rdd的特性,其底层计算逻辑也算将sql转换为rdd的计算。因此spark sql的计算也是基于内存的,这也是其计算速度快的原因之一。spark sql的大体流程就是解析sql后获取输入源,然后从输入源获取数据并转换为rdd弹性数据集,再接着根据sql中的相关语法转换为针对RDD处理的方法进行处理,最后展示结果或者通过相关方法将结果输出。目前支持的输入输出数据源有:

        各类文件:text文件、orc文件、parquet文件、csv文件、json文件、hdfs文件等

        数据库:ES、hbase、Cassandra、JDBC(因此几乎支持所有的关系型数据库)等

支持的操作:

        spark sql从数据源获取相关的数据集后,spark中的转换和行为算子其都支持,所以这里就不一一列举其支持的具体操作的。对于一些不支持的源和处理操作,spark sql也提供了相关的扩展方式。这些内容也将在后续的文章中一一进行介绍。

3.1 SqlContext、HiveContext、SparkContext、SparkSession 区别

        SQLContext :SQLContext是通往SparkSQL的入口,一旦有了SQLContext,就可以开始处理DataFrame、DataSet等。

        HiveContext :HiveContext是通往hive入口。查看API文档,可以发现HiveContext扩展了SQLContext,这意味着它支持SQLContext支持的功能以及更多(Hive特定的功能)。

        SparkContext :驱动程序使用SparkContext与集群进行连接和通信,它可以帮助执行Spark任务,并与资源管理器进行协调;使用SparkContext,可以访问其他上下文,比如SQLContext和HiveContext;使用SparkContext,我们可以为Spark作业设置配置参数。

        SparkSession :SparkSession是在Spark 2.0中引入的,简化了对不同上下文的访问。通过访问SparkSession,我们可以自动访问SparkContext。SparkSession现在是Spark的新入口点,它替换了旧的SQLContext和HiveContext。一旦我们访问了SparkSession,我们就可以开始使用DataFrame和Dataset了。

3.2 RDD、DataFrame、DataSet、Row、SchemaRDD区别

        RDD:弹性分布式数据集,简单理解为一个数据集合。RDD中的数据不包含任何结构信息

        DataFrame:DataFrame 是列组成的数据集,具有schema信息。它在概念上等同于关系数据库中的表,但在幕后进行了更丰富的优化。

        DataSet:DataSet是 Spark 1.6 中添加的一个新接口,它是比DataFrame更为强大的API,其结合了RDD和DataFrame的优点。DataFrame本质上也可以看做一种特殊的DataSet。

        Row:Row表示一行数据,本质就是一个定长的字段数组

        SchemaRDD:SchemaRDD是存放 Row 对象的RDD,每个Row对象代表一行记录。 还记录数据的结构信息(即数据字段)。但是1.3.0 及后续版本中,SchemaRDD 已经被DataFrame所取代

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值