2018-10-17flink中的Plan是如何连接的

2018-10-18  本文已影响0人  北子萌

相信使用flink作为分布式数据计算框架的朋友们都知道我们在flink中处理批处理作业和流计算作业是分两套API进行的,而其中批处理作业都会转换为Plan,并且声称优化计划OptimizedPlan,之后会通过编译的形式生成jobGraph。首先是根据execute创建Plan类型的计划。调用createProgramPlan进行创建,返回类型为Plan。在ExecutionEnvironment类中生成计划,之后会调用翻译算子的方法进入算子翻译器。具体语句如下:

对这个算子进行翻译,生成计划

进入到TranslateToPlan方法中,就是以下的代码段,逊汗提中递归的翻译了算子,从sink开始进行前向遍历,之后都进入translate方法中


算子翻译

transalate方法分为对于sink节点的翻译以及对于非sink节点的翻译,通过sink.getDataSet进行翻译,得到前驱,之后讨论前驱是属于什么类型的算子,可以看到标注的那一行,递归地在tranbslate方法中调用自身,接着连接自己的前驱,并且通过这个链式的链接方法设置资源分配:

算子翻译中的递归方法

通过这种递归一定要找到整个数据起点才可以继续进行,也就是DataSource,此时在进入下一条语句getName方法,由于DataSet前驱为空值,因此这条语句输出为空。再之后通过获取的OPerator类型为操作符进行赋值操作,通过java定义好的map类中的put方法进行赋值,再将其与后继节点进行连接。

算子类型的赋值

通过put方法后返回一个Operator类型作为翻译的结果,再之后通过tanslateToDataFlow方法,进入特定的类中,例如本例子中operator类型是flatMap,因此进入FlatMapOperatorBase方法中去建立FaltMap算子与input的链接关系。input作为整个plan的入口进行链接。通过translateToDataFlow类中的setInput方法将FlatMap算子与输入端的数据源连到一起。

建立连接的方法

经过以上步骤已将算子连接起来,生成一个执行计划,之后会阐述计划是如何进行优化的。

上一篇下一篇

猜你喜欢

热点阅读