Flink中的操作员并行性的一些拼图



我刚刚在下面得到了并行性的示例,并有一些相关问题:

  1. setParallelism(5(只是将并行性5设置为总和和flatmap和sum?

  2. 我们是否可以分别将不同的并行性设置为诸如flatmap和sum之类的不同运算符?例如集合5到sum和10至flatmap。

  3. 基于我的理解,凯比(Keyby(根据不同的键将数据流划分为逻辑流分区,并假设有10,000个不同的钥匙值,因此有10,000个不同的分区,那么有多少个线程将处理。10,000个分区?只有5个线程?如果我们没有设置setParallelism(5(?

  4. 怎么样

https://ci.apache.org/projects/flink/flink/flink-docs-reale-1.3/dev/parallel.html

final StreamExecutionEnvironment env =     
  StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<String> text = [...]
DataStream<Tuple2<String, Integer>> wordCounts = text
  .flatMap(new LineSplitter())
  .keyBy(0)
  .timeWindow(Time.seconds(5))
  .sum(1).setParallelism(5);
wordCounts.print();
env.execute("Word Count Example");

在操作员上调用 setParallelism时,它会更改该特定运算符的并行性。因此,在您的示例中,只有窗口运算符将使用5的并行性执行,并且使用默认并行性的flatMap运算符执行。

因此,您可以为每个操作员设置不同的并行性。但是,请注意,具有不同并行性的操作员不能被束缚并需要重新平衡(类似于洗牌(操作。

如果要为所有操作员设置并行性,则必须通过ExecutionEnvironment#setParallelism API调用来进行。

输入流中的keyBy操作分区与并行操作员实例一样多。这确保所有具有相同键的元素最终都在同一分区中。因此,在您将并行性设置为5的示例中,最终将获得5个分区。每个分区都可以带有不同键的元素。

执行环境级别如下所述,Flink程序是在执行环境的上下文中执行的。执行环境为所有操作员,数据源和数据沉没的执行环境定义了默认并行性。执行环境并行性可以通过明确配置操作员的并行性来覆盖。

可以通过调用setParallelism((方法来指定执行环境的默认并行性。要执行所有运算符,数据源和数据下沉3,请按以下方式设置执行环境的默认并行性:

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(3);
DataStream<String> text = [...]
DataStream<Tuple2<String, Integer>> wordCounts = [...]
wordCounts.print();
env.execute("Word Count Example");

相关内容

  • 没有找到相关文章

最新更新