我刚刚得到了下面的并行性示例,并提出了一些相关问题:
setparallelism(5)是将parallelism 5设置为sum还是同时设置flatmap和sum?
我们是否可以将不同的并行度分别设置为不同的运算符,例如flatmap和sum?例如将并行度5设置为sum,将并行度10设置为flatmap。
根据我的理解,keyby是根据不同的键将数据流划分为逻辑流\分区,假设有10000个不同的键值,那么有10000个不同的分区,那么有多少线程会处理这10000个分区?只有5条线?如果我们不设置setparallelism(5)呢?
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");
2条答案
按热度按时间n1bvdmb61#
打电话的时候
setParallelism
在一个操作符上,然后它改变这个特定操作符的并行性。因此,在您的示例中,只有窗口操作符将以并行度执行5
以及前面的flatMap
具有默认并行性的运算符。因此,可以为每个操作符设置不同的并行性。但是,请注意,具有不同并行性的操作符不能被链接,并且需要重新平衡(类似于洗牌)操作。
如果要为所有运算符设置并行度,则必须通过
ExecutionEnvironment#setParallelism
api调用。这个
keyBy
将输入流中的操作分区到具有并行运算符示例的分区中。这将确保具有相同键的所有元素最终位于同一分区中。所以在您的示例中,您将并行度设置为5
,您将得到5个分区。每个分区可以包含具有不同键的元素。vulvrdjw2#
这里提到的执行环境级别flink程序是在执行环境的上下文中执行的。执行环境为它执行的所有操作符、数据源和数据接收器定义默认的并行性。通过显式配置操作符的并行性,可以覆盖执行环境并行性。
可以通过调用setparallelism()方法来指定执行环境的默认并行性。要以3的并行度执行所有运算符、数据源和数据接收器,请按如下所示设置执行环境的默认并行度: