开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:扩展_Catalyst 优化器_SparkSQL 和 RDD 的区别】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12039
扩展_Catalyst 优化器_SparkSQL 和 RDD 的区别
前面说过的代码执行效率比 RDD 要高,spark SQL 是基于 RDD 而立,并且基于 RDD 之上,又做了那么多的工作,支持结构化,为什么比 RDD 的执行效率还高?
这不科学,通过这小节介绍一下这个 catalyst 优化器,做一个小的扩展,相信通过这个 catalyst 优化器,大家对 spark 系统高有一些深刻的认识了,同时,也能理解,spark SQL 当中最精髓、最精华的一个部分。
最精华的部分,就是 catalyst,介绍 catalyst 优化器的时候,应该先去说一说 RDD 和 sparks SQL 运行时的区别。
RDD 和 sparks SQL 的区别
1、RDD 的运行流程
(1)大致运行步骤
先将 RDD 解析为由 Stage 组成的 DAG,后将 Stage 转为 Task 直接运行。
如果要做一些优化,比如说,在进行一系列的这个操作,比如说 RDD.a,RDD.b,RDD.c,在这些操作之前,最后来一个 Filter,Filter 移到前面,移到这个位置去运行,效率比刚才的情况要稍微高一点。
因为 filter 这种东西过滤过了以后,整个数据集就小了,在进行 B 和 C 的操作的时候,相对来说速度就会更快。
(2)问题
任务会按照代码所示运行,依赖开发者的优化,开发者的会在很大程度上影响运行效率
(3)解决办法
创建一个组件,帮助开发者修改和优化代码,但是这在 RDD 上是无法实现的
为什么 RDD 无法自我优化?
l RDD 没有 Schema 信息
l RDD 可以同时处理结构化和非结构化的数据
这种优化方式叫做谓词上推,像这种优化方式,在 RDD 当中,除了手动去做,系统不能帮你做这个 RDD,不能帮你做这样的操作,谓词上推,有可能会推错,要进行谓词上推这种优化的话,谓词上推明显是一个非常常见的一个优化,在做这种优化的时候,先有结构化的结构信息,有这个数据集的结构信息,才能够非常稳当对其来进行优化,但是 RDD 有,所以 RDD 不好做这些优化。
2、sparks SQL
(1)sparks SQL 提供了什么?
和 RDD 不同,SparkSQL 的 Dataset 和 SQL 并不是直接生成计划交给集群执行,而是经过了 Catalyst 优化器,这个优化器能够自动帮助开发者优化代码。
也就是说,在 SparksQL 中,开发者的代码即使不够优化,也会被优化为相对较好的形式去执行。
(2)为什么 SparksQL 提供了这种能力?
首先, SparksQL 大部分情况用于处理结构化数据和半结构化数据,所以 SparkSQL 可以数据 schema 来进行优化。