首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flink中算子并行性的几个难题

Flink中算子并行性的几个难题
EN

Stack Overflow用户
提问于 2017-06-08 12:56:11
回答 2查看 9.1K关注 0票数 19

下面是并行性的示例,并有一些相关的问题:

  1. setParallelism(5)只是将并行性5设置为求和,还是同时设置flatMap和sum?
  2. 是否可以将不同的并行性分别设置为不同的算子,如flatMap和sum,如将并行性5设为sum,将10设置为flatMap。
  3. 根据我的理解,keyBy是根据不同的键将DataStream划分为逻辑流\分区,假设有10,000个不同的键值,所以有10,000个不同的分区,那么有多少线程将处理这10,000个分区?只有5根线?如果我们不设置setParallelism(5)呢?

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

代码语言:javascript
复制
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");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-08 13:32:52

当对运算符调用setParallelism时,它将更改此特定运算符的并行性。因此,在您的示例中,只有窗口操作符将被执行,并行性为5,而前面的flatMap运算符具有默认的并行性。

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

如果您想为所有操作符设置并行性,那么您必须通过ExecutionEnvironment#setParallelism API调用来实现它。

输入流中的keyBy操作分区与具有并行操作符实例的分区一样多。这可以确保所有具有相同键的元素都在同一个分区中结束。因此,在将并行性设置为5的示例中,您将得到5个分区。每个分区可以包含具有不同密钥的元素。

票数 12
EN

Stack Overflow用户

发布于 2020-02-23 04:14:46

正如这里提到的执行环境级别,Flink程序在执行环境的上下文中执行。执行环境为其执行的所有运算符、数据源和数据接收器定义了默认的并行性。可以通过显式配置操作符的并行性来覆盖执行环境并行性。

可以通过调用setParallelism()方法来指定执行环境的默认并行性。要执行所有操作符、数据源和数据接收器的并行性为3,请将执行环境的默认并行设置如下:

代码语言:javascript
复制
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(3);

DataStream<String> text = [...]
DataStream<Tuple2<String, Integer>> wordCounts = [...]
wordCounts.print();

env.execute("Word Count Example");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44436401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档