我刚刚在下面得到了并行性的示例,并有一些相关问题:
-
setParallelism(5(只是将并行性5设置为总和和flatmap和sum?
-
我们是否可以分别将不同的并行性设置为诸如flatmap和sum之类的不同运算符?例如集合5到sum和10至flatmap。
-
基于我的理解,凯比(Keyby(根据不同的键将数据流划分为逻辑流分区,并假设有10,000个不同的钥匙值,因此有10,000个不同的分区,那么有多少个线程将处理。10,000个分区?只有5个线程?如果我们没有设置setParallelism(5(?
怎么样
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");