了解Flink中的操作员之间的数据传输(批次)

太肥胖了

我仍在努力解决flink如何在不同运营商之间“交换/转移”数据以及运营商之间的实际数据发生什么情况。

以上面的DAG示例:执行DAG

  1. 将数据集转发/传输到GroupReduce运算符的所有并行实例,然后根据GroupReduce转换对数据进行缩减。

  2. 所有新数据都转发到Filter-> Map-> Map操作数,即,GroupReduce运算符的并行实例之一消耗的所有数据都将精确地传输到Filter-> Map-> Map运算符的一个实例(不需要进行序列化/反序列化,因此操作员访问GroupReduce操作员生成的数据)

  3. 所有GroupReduces输出数据在(Filter-> Map)运算符的所有并行实例之间进行散列并均匀分布/传输(运算符之间需要序列化/反序列化)

因此,例如,如果GroupReduce Operators输出约为100MB,它将转发100MB到(Filter-> Map-> Map)操作数,并哈希该100MB的副本并将其传输到(Filter-> Map)实例。所以我会再增加100MB的网络流量

我非常困惑,为什么在GroupReduce之后和Filter Steps之前会有如此多的网络流量。在将现在减少的数据发送给后续运算符之前,将GroupRedcue和Filter步骤链接在一起是否更好?

费利佩

GroupReduce功能是一样的利用MapReduce编程模型的组合器。

部分计算可以显着提高GroupReduceFunction的性能。此技术也称为应用组合器。实现GroupCombineFunction接口以启用部分计算,即此GroupReduceFunction的组合器。

因此,在组合器之后,总是存在将所有上游运算符连接到所有下游运算符的混洗阶段/分区。检查此答案以澄清什么是组合器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章