理解flink(batch)中操作符之间的数据传输

dauxcl2d  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(528)

我还在纠结于flink如何在不同的操作符之间“交换/传输”数据,以及操作符之间的实际数据会发生什么。
以上面的dag为例:执行的dag
数据集被转发/传输到groupreduce操作符的所有并行示例,数据根据groupreduce转换被缩减。
所有新数据都被转发到filter->map->map操作数,即groupreduce操作符的一个并行示例所消耗的所有数据都被传输到filter->map->map操作符的一个示例(无需序列化/反序列化,因此操作符访问groupreduce操作符生成的数据)
所有groupreduces输出数据都被散列,并在(filter->map)操作符的所有并行示例之间均匀分布/传输(操作符之间需要序列化/反序列化)
因此,例如,如果groupreduce操作符的输出约为100mb,它会将100mb转发到(filter->map->map)操作数,并对该100mb的副本进行哈希运算,然后将其传输到(filter->map)示例。因此,我将生成另一个100mb的网络流量
我很困惑为什么在groupreduce之后和filter步骤之前会有这么多的网络流量。在将现在减少的数据发送给后续操作员之前,将groupredcue和filter步骤链接在一起不是更好吗?

fafcakar

fafcakar1#

groupreduce函数与使用mapreduce编程模型中的组合器相同。
部分计算可以显著提高groupreducefunction的性能。这种技术也被称为应用组合器。实现groupcombinefunction接口以启用部分计算,即此groupreducefunction的组合器。
因此,在一个组合器之后,总是有一个洗牌阶段/分区,它将所有上游操作符连接到所有下游操作符。检查这个答案以阐明什么是合路器。

相关问题