大数据学习SparkSQL入门简介
在大数据学习当中,Spark框架所占的比重,还是非常高的。Hadoop和Spark基本上是大数据开发学习当中的重点内容,而Spark随着市场地位的不断提升,在学习阶段也得到更多的重视。今天的大数据学习分享,我们来对Spark当中的SparkSQL做个入门介绍。
SparkSQL是Spark生态圈当中的重要一员,甚至有坊间时有传言SparkSQL将取代ApacheHive,那么具体到底如何呢?SparkSQL简介
事实上,SparkSQL的由来是在前代框架的基础上继承其优点而来的。这就不得不提到Shark和Hive两个组件了。
在第一代大数据技术框架Hadoop生态圈当中,为了降低使用MapReduce的难度,Hive出现了。作为当时唯一运行在hadoop上的SQLonHadoop工具,Hive工具在使用当中,MapReduce计算模式IO消耗极大,运行效率也比较低。
为了提升SQLonHadoop的效率,于是就有了更多的工具产生,包括MapR的Drill、Cloudera的Impala、Shark。
这其中,Shark可以说就是SparkSQL的前身。Shark基于Hive进行了改进,比如引入缓存管理,改进和优化执行器等。Shark基于Spark引擎运行,使得SQL查询的速度得到10100倍的提升。
后来,鉴于Shark对于hive的太多依赖,制约了Spark各个组件的相互集成,于是提出了SparkSQL项目。
SparkSQL抛弃原有Shark的代码,汲取了Shark的一些优点,如内存列存储(InMemoryColumnarStorage)、Hive兼容性等,重新开发了SparkSQL代码。SparkSQL特点
1)引入新的RDD类型SchemaRDD,可以像传统数据库定义表一样来定义SchemaRDD。
2)在应用程序中可以混合使用不同来源的数据,如可以将来自HiveQL的数据和来自SQL的数据进行Join操作。
3)内嵌了查询优化框架,在把SQL解析成逻辑执行计划之后,最后变成RDD的计算。
RDD、DataFrame、DataSet的关系
在其后的发展当中,SparkSQL仍在不断优化,比较典型的就是RDD、DataFrame、DataSet概念的发展。
最初Spark使用RDD,但是SQL化的支持不太好;后来演变成DataFrame,类型转又不太安全;最后发展成DataSet兼容两者的优点。
RDD
RDD本身也叫做ResilientDistributedDataset,即弹性分布式数据集。是Spark中最底层的数据抽象,只包含数据,不包含结构信息。需要反序列化才能知道内部存储的什么。
DataFrame
DataFrame除了数据本身,还记录了元数据信息,标识了每一列的字段类型和名称。相当于是RDDSchema信息。
DataSet
Spark最顶层的数据抽象,不仅包含数据还包含schema信息,又能兼顾java对象格式。当DataSet中存储的是Row时,就是DataFrame。
今天的大数据学习分享,SparkSQL入门,以上就为大家做了一个简单的介绍了。大数据学习当中,Spark是重点部分,接下来我们也会继续对Spark生态圈的各个组件去逐一做介绍。