gpt4 book ai didi

apache-flink - Flink中算子Parallelism的一些谜题

转载 作者:行者123 更新时间:2023-12-04 04:15:21 25 4
gpt4 key购买 nike

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

  • setParallelism(5) 是将 Parallelism 5 设置为 sum 还是 flatMap 和 sum?
  • 是否可以将不同的Parallelism 分别设置为flatMap 和sum 等不同的运算符?例如将Parallelism 5 设置为sum,将Parallelism 10 设置为flatMap 。
  • 根据我的理解,keyBy 是根据不同的键将 DataStream 分区为逻辑 Stream\partitions,假设有 10,000 个不同的键值,所以有 10,000 个不同的分区,那么有多少线程会处理这 10,000 个分区?只有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");

    最佳答案

    打电话时setParallelism在一个运算符上,然后它会改变这个特定运算符的并行性。因此,在您的示例中,将仅以 5 的并行度执行窗口运算符。和前面的 flatMap具有默认并行度的运算符。

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

    如果你想为所有操作符设置并行度,那么你必须通过 ExecutionEnvironment#setParallelism 来完成。 API 调用。
    keyBy操作将输入流中的分区划分为与并行运算符实例一样多的分区。这可以确保具有相同键的所有元素最终都在同一个分区中。因此,在您将并行度设置为 5 的示例中,你最终会得到 5 个分区。每个分区可以包含具有不同键的元素。

    关于apache-flink - Flink中算子Parallelism的一些谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44436401/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com