zoukankan      html  css  js  c++  java
  • Flink Task 并行度

    1. 并行的数据流

      • Flink程序由多个任务(转换/运算符,数据源和接收器)组成,Flink中的程序本质上是并行和分布式的。

      • 在执行期间,流具有一个或多个流分区,并且每个operator具有一个或多个operator*子任务*

      • operator子任务彼此独立,并且可以在不同的线程中执行,这些线程又可能在不同的机器或容器上执行。

      • operator子任务的数量是该特定operator的并行度。

      • 流的并行度始终是其生成operator的并行度。

      • 同一程序的不同operator可能具有不同的并行级别。

      • 示意图:

        image-20191113083419692

      • 流可以以一对一(或重新分配)模式或以重新分发模式在两个运营商之间传输数据:

        • 一对一流
          • 如上图中的Sourcemap运算符之间
          • 保留元素的分区和排序
          • 这意味着map运算符的subtask [1] 将看到与Source运算符的subtask [1]生成的顺序相同的元素
        • 重新分配流
          • 在上面的mapkeyBy / window之间,以及 keyBy / windowSink之间重新分配流
          • 每个运算符子任务将数据发送到不同的目标子任务, 具体取决于所选的转换。
          • 图中是根据 keyby算子进行数据的重新分布。
    2. 任务并行度设置

      • 算子级别

        • 可以通过调用其setParallelism()方法来定义单个运算符,数据源或数据接收器的并行度。

                  //1.初始化环境
                  StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
                  //2.读取数据源,并进行转换操作
                  DataStream<Tuple2<String, Integer>> dataStream = env
                          .socketTextStream("ronnie01", 9999)
                          .flatMap(new Splitter())
                          .keyBy(0)
                          //每5秒触发一批计算
                          .timeWindow(Time.seconds(5))
                          // 设置并行度
                          .sum(1).setParallelism(3);
          
      • 执行环境级别

        • 执行环境级别的并行度是本次任务中所有的操作符,数据源和数据接收器的并行度。

        • 可以通过显式的配置运算符并行度来覆盖执行环境并行度。

                  //1.初始化环境
                  StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
                  
                  env.setParallelism(3);
          
      • 客户端级别

        • 在向Flink提交作业时,可以在客户端设置并行度,通过使用指定的parallelism参数-p。
        • 例如:
          • ./bin/flink run -p 10 ../examples/WordCount-java.jar
      • 系统级别

        • 通过设置flink_home/conf/flink-conf.yaml 配置文件中的parallelism.default配置项来定义默认并行度。
  • 相关阅读:
    静态成员 执行顺序
    排序之插入排序
    结构体字节对齐问题
    建模基础&UML
    C#中隐藏(new)和方法重载(overide)的区别
    培训记录
    C笔记
    用例
    .NET架构
    C#格式化日期
  • 原文地址:https://www.cnblogs.com/ronnieyuan/p/11846623.html
Copyright © 2011-2022 走看看