flink1.12.x 打印执行计划

说明

当需求变得越来越复杂时,可能在一个 Job 里面算子的个数会达到几十个、甚至上百个,在如此多算子的情况下,整个应用程序就会变得非常复杂,所以在编写 Flink Job 的时候需要知道 Job 的执行计划

Flink 是支持可以获取到整个 Job 的执行计划的

Flink 官网还提供了一个可视化工具 visualizer(可以将执行计划 JSON 绘制出执行图),见 链接

获取执行计划

System.out.println(env.getExecutionPlan());

完整代码

package chongfenqu;

import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class F11打印执行计划 {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        DataStreamSource<String> dss = env.fromElements("lilei", "lucy", "lilei", "lili");

        SingleOutputStreamOperator<Tuple2<String,Integer>> mapSOSO = dss.map(item -> Tuple2.of(item, 1))
                .returns(Types.TUPLE(Types.STRING,Types.INT));
        SingleOutputStreamOperator<Tuple2<String, Integer>> sumSOSO = mapSOSO
                .keyBy(item -> item.f0)
                .sum(1);

        sumSOSO.print();

        System.out.println(env.getExecutionPlan());
        env.execute();
    }
}

打印结果

{
  "nodes" : [ {
    "id" : 1,
    "type" : "Source: Collection Source",
    "pact" : "Data Source",
    "contents" : "Source: Collection Source",
    "parallelism" : 1
  }, {
    "id" : 2,
    "type" : "Map",
    "pact" : "Operator",
    "contents" : "Map",
    "parallelism" : 8,
    "predecessors" : [ {
      "id" : 1,
      "ship_strategy" : "REBALANCE",
      "side" : "second"
    } ]
  }, {
    "id" : 4,
    "type" : "Keyed Aggregation",
    "pact" : "Operator",
    "contents" : "Keyed Aggregation",
    "parallelism" : 8,
    "predecessors" : [ {
      "id" : 2,
      "ship_strategy" : "HASH",
      "side" : "second"
    } ]
  }, {
    "id" : 5,
    "type" : "Sink: Print to Std. Out",
    "pact" : "Data Sink",
    "contents" : "Sink: Print to Std. Out",
    "parallelism" : 8,
    "predecessors" : [ {
      "id" : 4,
      "ship_strategy" : "FORWARD",
      "side" : "second"
    } ]
  } ]
}

可视化

访问:https://flink.apache.org/visualizer/

将上面的 json 复制到文本框,点击 Draw,如下图;

生成执行计划图

从图中可以看到下面内容呢:

  • operator name(算子):比如 source、sink

  • 每个 operator 的并行度:比如 Parallelism: 5

  • 数据下发的类型:比如 FORWARD

参考:

https://blog.csdn.net/weixin_42073629/article/details/120107483


原文出处:/show_1IX44YsfgaMT.html