一、SparkSQL发展:
Shark是一个为spark设计的大规模数据仓库系统,它与Hive兼容
1.0以前: Shark
1.1.x开始:SparkSQL(只是测试性的) SQL
1.3.x: SparkSQL(正式版本)+Dataframe
1.5.x: SparkSQL 钨丝计划
1.6.x: SparkSQL+DataFrame+DataSet(测试版本)
2.x:
- SparkSQL+DataFrame+DataSet(正式版本)
- SparkSQL:还有其他的优化
- StructuredStreaming(DataSet)
spark on hive :这里的hive只做数据的存储,sql由spark来解析并执行。
hive on spark:这里hive用来解析sql语句,spark来执行。
二、 RDD 、DataFrame 、DataSet 三者的区别与联系:
RDD前置知识:
优点:
编译时类型安全:编译时就能检查出类型错误
面向对象的编程风格:直接通过类名点的方式来操作数据
缺点:
序列化和反序列化的性能开销
无论是集群间的通信, 还是 IO 操作都需要对对象的结构和数据进行序列化和反序列化。
GC 的性能开销 ,频繁的创建和销毁对象, 势必会增加 GC
spark2.0中,引入SparkSession作为DataSet和DataFrame API的切入点
2、DataFrame :DataFrame与RDD的主要区别在于,DataFrame引入了 schema 表结构元信息、 off-heap 堆外内存。
schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。Spark通过 schema 就能够读懂数据, 因此在通信和 IO 时就只需要序列化和反序列化数据, 而结构的部分就可以省略了。
off-heap 堆外内存,意味着 JVM堆以外的内存, 这些内存直接受操作系统管理(而不是 JVM)。Spark能够以二进制的形式序列化数据(不包括结构)到 off-heap 中, 当要操作数据时,就直接操作 off-heap 内存。由于 Spark 理解 schema,所以知道该如何操作。off-heap 就像地盘,schema 就像地图,Spark有地图又有自己地盘了,就可以自己说了算了,不再受 JVM的限制,也就不再收 GC 的困扰了。
缺点:DataFrame 不是类型安全的,API也不是面向对象风格的。
这里的类型安全是指:编译时检查类型是否合法,例如程序需要 new A()你传了一个 B类 过来。不会出现变量的类型错误。
3、DataSet:
参考博客:DataSet https://www.cnblogs.com/frankdeng/p/9301760.html
参考博客:sparkSql https://www.cnblogs.com/frankdeng/p/9301743.html