一、前言:
在使用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,而MapReduce的shuffle又是基于磁盘的,因此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 sql。spark 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所取代。
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/1526290.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
spark sql总体介绍
一、前言: 在使用spark sql时,有许多地方需要阅读源码才能找到解决方式,每次阅读之后记录的东西也比较零碎,对于spark sql一直没有一个全局的认知,故此想整理一个系列文章以加深理解,后面也会将遇到……
杭电OJ(HDOJ)2553题:N皇后问题(回溯法)
题意:
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法……
Oracle数据库预定义帐号(SYS,SYSTEM,SYSMAN,DBSNMP,SCOTT)
1、SYS用户与SYSTEM用户
以sys用户登陆时的需要以SYSDBA的角色登陆,所以在输入密码的时候在密码后加上 as sysdba 。 SYSSYSTEM地位Oracle的一个超级用户Oracle默认的系统管理员,拥有DBA权限主要作用主要用来维护系统信息和管理实例通常用来管理Oracle数……
杭电OJ(HDOJ)2095题:find your present (2)(数论)
题意:
输入一个奇数n(0
示例输入:
5 1 1 3 2 2 3 1 2 1 0
示例输出:
3 2
解决方案(1):
使用排序,将这个n个数进行升序排序,这样使相同的数两两排列在一起,只……
杭电OJ(HDOJ):七夕节
题意:
输入一个数n,找出此数的所有因子和,数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6。和就是1234616。输入数据的第一行是一个数字T(1<T<500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据……
动态规划——Minimum-sum descent(数塔问题)
题意:
给出一个数塔,求出从顶层到底层所经过的数字的最小(或者最大)和。
示例: 解决方案:
采用自底向上的动态规划方法,从最底层向上重构出新数塔,以最后一层为基础,从……
类图关系符号
1、关联(Association)
1)、普通关联 关联表示两个类的对象之间存在某种语义上的联系。例如人家使用计算机2)、关联类 为了说明和纪录一些关联之间的性质和信息,可以引入一个关联类来记录。关联中的每个连接与类的一个……
创建模式——单例模式
1、什么是单例模式 Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接(当然多使用连接池)都需要这样的单线程操作。Singleton模式就为我们提供了这样实现的可能。……
Oracle经典20题
–1. 列出至少有一个员工的所有部门。
select * from dept where deptno in(select distinct deptno from emp
);–2. 列出薪金比“SMITH”多的所有员工。
select * from emp where sal > (select distinct sal from emp where ename SMITH
);–3. 列出所有员工的姓名及其……
Oracle经典查询练手第四篇
–1、 查询emp表中的所有信息
select * from emp;–2、 显示emp表的雇员名称和工资。
select ename,sal from emp;–3、 查询emp表中部门编号为20的并且sal(工资)大于3000的所有员工信息
select * from emp where deptno20 and sal >3000;–4、 查询e……
对所有节点设置透明度
http://www.cnblogs.com/xdao/p/cocos2dx_setOpaticy.html…
scrollview和tableview混合使用
http://www.tairan.com/archives/9958/…
cocos2d中的clone函数
clone函数是widget的函数,对于node不适用,所以使用这个函数,务必保证所有的控件以及子节点是widget的子类…
cocos2d中关于函数指针的应用
详细看转载链接…
c++资料
http://club.topsage.com/thread-361458-1-1.html…
c++多线程转载自菜鸟教程
http://www.runoob.com/w3cnote/cpp-multithread-demo.html…
考虑可再生能源消纳的电热综合能源系统日前经济调度模型
目录 1 主要内容
模型示意图
目标函数
程序亮点
2 部分程序
3 程序结果
4 程序链接 1 主要内容
本程序参考文献《考虑可再生能源消纳的建筑综合能源系统日前经济调度模型》模型,建立了电热综合能源系统优化调度模型,包括燃气轮机、燃气锅炉、余热……
套接字概念理解
一、监听端消息端 套接字创建流程:
1.调用socket函数 创建套接字
2.调用bind函数对套接字绑定端口和ip
3.调用listent函数是套接字处于可接受状态
4.调用accept函数手里链接请求
二、发送消息端 套接字创建流程
1.调用socket函数 创建套接字
2.调用connect……
(5.4)(TCP/IP网络编程)
1、TCP套接字连接设置的三次握手过程 与对方套接字建立连接,(发送数据包序号为1000,ack为空) 与对方套接字进行数据交换(返回数据包序号为2000,ack:1001); 断开与对方套接字连接(发送……
第八章 域名以及网络地址
1、DNS: (Domain Name System) 域名系统
2、DNS是对IP地址和域名进行相互转换的系统,其核心就是DNS服务器。…
编程日记2023/4/16 15:01:04