Catalyst揭秘 Day7
SQL转为RDD的具体实现
从技术角度,越底层和硬件偶尔越高,可动弹的空间越小,而越高层,可动用的智慧是更多。Catalyst就是个高层的智慧。
Catalyst已经逐渐变成了所有Spark框架的解析优化引擎,RDD是通用抽象的数据结果,RDD+Catalyst就构成了Spark的新底层。Catalyst是在RDD基础上进行封装,一旦优化了Catalyst,所有的子框架就都得到了优化。
执行过程
在昨天,我们已经看到SparkPlan会通过prepareForExecution最终完成转换RDD的操作。
其实际触发需要一个action级别的操作,让我们看一下collect这个action方法。
其执行会分为几步:
- 调用execute方法,返回RDD,会执行具体的doPrepare和doExecute。
- 这里我们可以非常简单的看到一个真相,做了一个collect操作,这是RDD的方法
在外面调用了conveter方法。
其核心就是把catalyst的类型变成Scala的类型,从而完成了数据的输出。
小结
至此,我们已经过滤了数据从SQL输入到数据输出的完整过程。
语句流程:
SQL语句 --> 调用sqlparse --> unresolved logical plan
--> 调用analyzer --> resovled logical plan
--> 调用optimizer --> optimized logical plan
--> 调用sparkPlanner --> sparkPlan
--> 调用prepareForExecution --> prepared sparkplan
执行流程:
sparkplan --> 调用execute --> RDD
--> 调用converter --> Scala数据
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580