Flink:Shuffle with Parallelism = 1
Flink: Shuffle with Parallelism = 1
我 运行ning Flink
只有一个节点 Parallelism = 1
以便将其性能与单线程应用程序进行比较。我想知道 Flink
是否仍在使用 Shuffle
尽管它没有并行使用 运行。所以如果例如执行以下命令:
var counts = text.flatMap { _.toLowerCase.split("\W+") filter { _.nonEmpty } }
.map { (_, 1) }
.groupBy(0)
.sum(1)
groupBy
之前会使用 Shuffle
吗?有没有办法检查这个?
(Interactive Scala Shell
的输出中有一个 FlatMap
, Map
, Combine
最后一个 Reduce
观察。相同适用于 运行 Parallelism > 1
.)
Flink 为操作 ds.groupBy(0).sum(1)
生成独立于实际并行度的作业图 ... -> Combiner -> Reducer
。在 Combiner
和 Reducer
之间引入了一个散列分区器(洗牌步骤)。这对所有 parallelism > 1
.
都有意义
对于parallelism = 1
,优化器理论上可以删除洗牌步骤,因为这不是必需的。但是,它实际上应该不会影响程序的性能。
原因是 parallelism = 1
所有工作都将在本地组合器中完成。这意味着组合器计算结果总和,然后只将单个元素发送到缩减器。此外,由于 combiner 和 reducer 运行 在同一台机器上,因此不涉及网络通信。通过交出一个内存段来简单地传输数据。由于 Flink 还支持流式混洗,因此组合器甚至不必在第一个结果发送到 reducer 之前完成。合并器和缩减器都可以同时运行,从而避免中间结果的具体化。
我 运行ning Flink
只有一个节点 Parallelism = 1
以便将其性能与单线程应用程序进行比较。我想知道 Flink
是否仍在使用 Shuffle
尽管它没有并行使用 运行。所以如果例如执行以下命令:
var counts = text.flatMap { _.toLowerCase.split("\W+") filter { _.nonEmpty } }
.map { (_, 1) }
.groupBy(0)
.sum(1)
groupBy
之前会使用 Shuffle
吗?有没有办法检查这个?
(Interactive Scala Shell
的输出中有一个 FlatMap
, Map
, Combine
最后一个 Reduce
观察。相同适用于 运行 Parallelism > 1
.)
Flink 为操作 ds.groupBy(0).sum(1)
生成独立于实际并行度的作业图 ... -> Combiner -> Reducer
。在 Combiner
和 Reducer
之间引入了一个散列分区器(洗牌步骤)。这对所有 parallelism > 1
.
对于parallelism = 1
,优化器理论上可以删除洗牌步骤,因为这不是必需的。但是,它实际上应该不会影响程序的性能。
原因是 parallelism = 1
所有工作都将在本地组合器中完成。这意味着组合器计算结果总和,然后只将单个元素发送到缩减器。此外,由于 combiner 和 reducer 运行 在同一台机器上,因此不涉及网络通信。通过交出一个内存段来简单地传输数据。由于 Flink 还支持流式混洗,因此组合器甚至不必在第一个结果发送到 reducer 之前完成。合并器和缩减器都可以同时运行,从而避免中间结果的具体化。