前言
我们这里所说的优化执行计划,是指从生成Plan之后,一直到生成JobGraph之前这一期间对Plan进行各种转换、增强、优化处理。从用户编程的Flink批处理程序开始,一直到生成JobGraph的整个过程,这个过程中,会创建很多数据结构来完成执行计划的优化工作,而且,通过分层增强与优化的方式,有利于我们对每层进行了哪些处理有一个很好地理解。我们从整理流程上来看,都有哪些核心的处理,然后会对每一步进行概要说明,从宏观上理解每一步都做了哪些操作。批处理执行计划生成及优化的主要流程,如下图所示:
根据上图,我们将Flink批处理执行计划生成的流程,分为如下几个阶段进行说明。
- 构建用户编程Operator DAG
把用户程序中设置的各种DataSource、Transformation、DataSink及其配置信息进行收集,以最原始的形态保存在ExecutionEnvironment上线文环境对象中,当然也跟踪了从DataSource到DataSink之间的操作顺序,最后通过ExecutionEnvironment对象,基于DataSink就可以从后向前遍历,直接链接到DataSource。在上面的处理过程中,涉及到3个比较重要的内容:一是用户根据Flink定义的各种Transformation接口实现并传入的处理函数,也包括Flink为了完成处理内部直接创建的函数对象;二是创建位于
org.apache.flink.api.java.operators包下面的Operator具体实现类对象;三是根据用户编写的程序配置,比如并行度、Broadcast变量等等,收集这些配置并设置到对应的Operator对象上。
- 生成通用Operator DAG
根据ExecutionEnvironment中收集的信息,生成程序Plan。Flink批处理在生成程序Plan的过程中,比较容易理解,就是把原生的Operator(与
org.apache.flink.api.java.operators包下面的具体实现相对应),转换成语义更加丰富的Operator(与org.apache.flink.api.common.operators包下面的具体实现相对应),也就是通过调用
如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
[Java架构群]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
org.apache.flink.api.java.op