9.10. 分布式流执行


分布式流执行的工作方式与映射减少非常相似。除非在这种情况下,我们发送零到多个中间操作(映射、过滤器等),以及单个终端操作到各个节点。操作基本上可以分为以下几项:

  1. 需要的片段分组在一起,节点是给定片段的主所有者
  2. 生成请求以发送到包含中间和终端操作的每个远程节点,包括它应该处理的片段

    1. 如果需要,将在本地执行终端操作
    2. 每个远程节点接收这个请求并运行操作,然后发回响应
  3. 然后,本地节点将收集本地响应和远程响应,一起执行操作本身所需的任何减少。
  4. 最终的减少响应将返回到用户

在大多数情况下,所有操作都完全分发,因为操作都是在每个远程节点中完全应用,而且通常仅应用最后一个操作或相关操作或相关操作,以降低多个节点的结果。个重要的一点是,中间值不一定是序列化的,它是返回所需部分的最后一个值(下将突出显示各种操作除外)。

终端操作员 分发结果 后,以下段落描述了分布式减少对各种终端操作器的工作量。其中一些是特殊的,因为中间值可能需要序列化而不是最终结果。

AllMatch noneMatch anyMatch
allMatch 操作在每个节点上运行,然后所有结果都在本地进行逻辑,以获得适当的值。noneMatchanyMatch 操作使用逻辑或代替。在已知最终结果后,这些方法还会有早期终止支持,并停止远程和本地操作。
collect
收集 方法非常有趣,它执行几个额外的步骤。远程节点正常执行所有操作,但不在结果上执行最终完成程序,而是发送回完全组合的结果。https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collector.html#finisher--然后,本地线程 会将 远程和本地结果组合成一个值,然后是最后完成的。这里要记住的一点是,最终值不一定是序列化的,而是从供应商和 组合 方法产生的值。https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collector.html#supplier--
数量
count 方法只是将数字添加到每个节点中。
findAny findFirst
findAny 操作只返回他们找到的第一个值,无论是来自远程节点还是本地。请注意,该功能支持早期终止,当一个值被发现后就不会处理它。注意 findFirst 方法是特殊的,因为它需要排序的中间操作,而这在 例外 部分中详述。
max min
maxmin 方法会在每个节点上找到对应的 min 或 max 值,然后在本地执行最终缩减,以确保返回所有节点之间的 min 或 max。
reduce
各种减少方法 123 将最终对结果进行序列化,因为竞争者可以做到。如果您已提供,则会在本地将本地和远程结果集合在一起,然后再合并这些结果。请注意,这意味着来自 combiner 的值不必是 Serializable。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部