下面是并行性的示例,并有一些相关的问题:
https://ci.apache.org/projects/flink/flink-docs-release-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");发布于 2017-06-08 13:32:52
当对运算符调用setParallelism时,它将更改此特定运算符的并行性。因此,在您的示例中,只有窗口操作符将被执行,并行性为5,而前面的flatMap运算符具有默认的并行性。
因此,您可以为每个操作符设置不同的并行性。但是,请注意,具有不同并行性的操作符不能被链接,并且需要重新平衡(类似于洗牌)操作。
如果您想为所有操作符设置并行性,那么您必须通过ExecutionEnvironment#setParallelism API调用来实现它。
输入流中的keyBy操作分区与具有并行操作符实例的分区一样多。这可以确保所有具有相同键的元素都在同一个分区中结束。因此,在将并行性设置为5的示例中,您将得到5个分区。每个分区可以包含具有不同密钥的元素。
发布于 2020-02-23 04:14:46
正如这里提到的执行环境级别,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");https://stackoverflow.com/questions/44436401
复制相似问题