一、Spark SQL介绍
1、为什么需要SQL
1) 事实上的标准
2) 易学易用
3) 受众面大
2、Shark(已经停止维护,不建议在生产上使用。)
Shark产生的目的就是为了让hive跑在spark之上。
Hive: 类似于sql的Hive QL语言, sql 翻译成 mapreduce
特点: 使用mapreduce作为引擎
改进: hive on tez、hive on spark、hive on mapreduce
Spark: hive on spark ===> (也就是)shark
shark刚推出时,很受欢迎。计算速度快,基于spark、基于内存的列式存储,与hive能够兼容。
缺点: hive ql的解析、逻辑执行计划生成、执行计划优化都要依赖于hive
仅仅只是把物理执行计划从mr作业替换成spark作业。
Shark终止以后,产生了2个分支
1) hive on spark
Hive社区,源码是在Hive中
2) Spark SQL
Spark社区,源码是在Spark中
支持多种数据源,多种优化技术,扩展性好很多。
二、SQL on Hadoop常用框架介绍
常用的框架如下图所示,包括HIVE,Impala,DRILL,Spark,presto,都是基于Hadoop的。
1、HIVE(facebook开源)
将sql装换成mapreduce
提出了metastore(元数据)概念,例如Hive表的名字,表里有什么列,每个列的数据类型,数据存放在hdfs的路径上。这些元数据,在Spark也能使用。
2、Impala(cloudera公司开发的, hadoop常用版本cdh也是这家公司开发的,也是生产上建议使用的cdh版本)
提供了cm,web方式安装hadoop。
Impala提供了sql,有自己的守护进程执行的,非mr,基于内存的,对内存的要求比较高。
metastore(元数据)
3、presto (facebook开源)
国内用的比较多的如京东
4、DRILL
基于sql
访问hdfs, rdbms,json、hbase,mangodb,s3、hive
5、Spark SQL
sql
dataframe/dataset api
metastore
访问hdfs, rdbms,json、hbase,mangodb,s3、hive ==> 外部数据源
三、Spark SQL概述
1、Spark Sql是Spark的核心组件,在Spark1.0中开始出现(April 2014)
2、能有运行SQL和Hive QL,包括UDFs UDAFs 和SerDes。
3、通过JDBC的方式连接已经存在的BI工具
4、能够支持多种语言,包括Python,Scala,Java 和R语言。
5、Spark SQL能处理结构化的数据。不仅仅有访问或者操作SQL的功能,还提供了 其他丰富的操作:外部数据源、优化
总结:
1) Spark SQL的应用不局限于SQL
2) 访问hive、json、parquet等文件数据
3) SQL只是Spark SQL的一个功能而已。
4) Spark SQL提供了SQL的api、DataFrame和Dataset的API。
四、Spark SQL愿景
Write less code: 写更少的代码
Read less data: 读更少的数据(优化引擎去掉不必要的数据)
Let the optimizer do the hard work: 将优化的工作交给底层的优化器。
五、Spark SQL架构图
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!