Catalyst揭秘 Day7 SQL转为RDD的具体实现

Catalyst揭秘 Day7

SQL转为RDD的具体实现

从技术角度,越底层和硬件偶尔越高,可动弹的空间越小,而越高层,可动用的智慧是更多。Catalyst就是个高层的智慧。

Catalyst已经逐渐变成了所有Spark框架的解析优化引擎,RDD是通用抽象的数据结果,RDD+Catalyst就构成了Spark的新底层。Catalyst是在RDD基础上进行封装,一旦优化了Catalyst,所有的子框架就都得到了优化。

执行过程

在昨天,我们已经看到SparkPlan会通过prepareForExecution最终完成转换RDD的操作。
Catalyst揭秘 Day7 SQL转为RDD的具体实现

其实际触发需要一个action级别的操作,让我们看一下collect这个action方法。
Catalyst揭秘 Day7 SQL转为RDD的具体实现
其执行会分为几步:

  • 调用execute方法,返回RDD,会执行具体的doPrepare和doExecute。

Catalyst揭秘 Day7 SQL转为RDD的具体实现

  • 这里我们可以非常简单的看到一个真相,做了一个collect操作,这是RDD的方法

Catalyst揭秘 Day7 SQL转为RDD的具体实现

  • 在外面调用了conveter方法。
    Catalyst揭秘 Day7 SQL转为RDD的具体实现

  • 其核心就是把catalyst的类型变成Scala的类型,从而完成了数据的输出。
    Catalyst揭秘 Day7 SQL转为RDD的具体实现

小结

至此,我们已经过滤了数据从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

上一篇:[原]如何在Android用FFmpeg+SDL2.0解码图像线程


下一篇:linux下使用crontab定时备份MYSQL数据库的方法: