美文网首页
2018-10-17flink中的Plan是如何连接的

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

作者: 北子萌 | 来源:发表于2018-10-18 15:24 被阅读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算子与输入端的数据源连到一起。

    建立连接的方法

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

    相关文章

      网友评论

          本文标题:2018-10-17flink中的Plan是如何连接的

          本文链接:https://www.haomeiwen.com/subject/zbkrzftx.html