当前位置: 首页 > 知识库问答 >
问题:

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

阎丰羽
2023-03-14

我仍然纠结于flink如何在不同的运营商之间“交换/转换”数据,以及运营商之间的实际数据发生了什么。

GroupReduces的所有输出数据都被散列,并在(filter->map)运算符的所有并行实例中均匀分布/传输(运算符之间需要序列化/反序列化)

因此,例如,如果GroupReduce运算符的输出约为100MB,它将把100MB转发给(filter->map->map)操作数,并对100MB的副本进行散列,然后将其传送给(filter->map)实例。所以我将再获得100MB的网络流量

我很困惑为什么在GroupReduce和Filter步骤之前会有这么多的网络流量。将GroupRedcue和Filter步骤链接在一起,然后再将现在减少的数据发送给后续操作符,难道不是更好吗?

共有1个答案

卫胜
2023-03-14

GroupReduce函数与使用MapReduce编程模型中的组合器相同。

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

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

 类似资料:
  • 问题内容: 我在应用程序中使用Hibernate ORM和PostgreSQL,有时我使用批处理操作。最初,我不明白为什么在批处理大小为25的日志中,会生成25个查询,并且最初认为它无法正常工作。但是之后,我查看了pg驱动程序的源代码,并在PgStatement类中找到了以下几行: 并在PgPreparedStatement类中 我注意到,事实证明,如果批处理的大小达到25,则会发送25个带有附加

  • 我在我的应用程序中使用Hibernate ORM和PostgreSQL,有时我使用批处理操作。起初我不明白为什么在批处理大小=25的日志中,会生成25个查询,起初我认为它不能正常工作。但是在那之后,我查看了pg驱动程序的源代码,在Pg语句类中发现了以下几行: 在PgPreparedStatement类中 我注意到,如果批处理的大小变为25,则会发送25个查询并附带参数。 数据库日志证实了这一点,例

  • 我有一个包含Reader->Processor->Writer的spring批处理。 B/W传递的数据类型为: 在中从CSV文件读取一个简单的批处理数据时,中的一些处理&输出CSV文件由编写。 请建议。如果你认为任何其他方法会更好,请建议。 谢谢

  • 第1步--第一步从数据库中读取某些事务,并生成一个记录ID列表,这些记录ID将通过jobContext属性发送到第2步。 步骤2-这应该是一个分区步骤:从步骤应该基于从步骤1获得的列表进行分区(每个线程从列表中获得不同的Id),并在不相互干扰的情况下执行它们的读/处理/写操作。 我的问题是,尽管我希望根据步骤1产生的列表对数据进行分区,但spring在步骤1开始之前就配置了步骤2(因此调用了分区器

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 下面是我的流处理的伪代码。 上面的代码流程正在创建多个文件,我猜每个文件都有不同窗口的记录。例如,每个文件中的记录都有时间戳,范围在30-40秒之间,而窗口时间只有10秒。我预期的输出模式是将每个窗口数据写入单独的文件。对此的任何引用或输入都会有很大帮助。