9.10. 分布式流执行


分布式流执行方式类似于映射减少。除了本例中,我们会向不同的节点发送零到多个中间操作(映射、过滤等)和单个终端操作。操作基本上会减少到以下几项:

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

    1. 如有必要,终端操作将在本地执行
    2. 每个远程节点都将接收此请求并运行操作,然后发送响应回
  3. 然后,本地节点将收集本地响应和远程响应,同时执行操作本身所需的任何减少。
  4. 最终减少了响应,然后返回给用户

在大多数情况下,所有操作都是完全分发的,因为操作是在每个远程节点上完全应用,通常只有最后一个操作或相关操作才可以重新应用,以减少多个节点的结果。务必要注意,中间值实际上不需要被序列化,它是发送的最后一个值,这是所需部分(突出显示各种操作的异常)。

终端 operator 分布的结果 会减少以下段落描述了各种终端操作器的分布式缩减如何工作。其中一些是特殊的,可能需要中间值才能被序列化,而不是最终结果。

allMatch noneMatch anyMatch
allMatch 操作在每个节点上运行,然后所有结果在本地逻辑上进行,以获取适当的值。noneMatchanyMatch 操作使用逻辑或替代。这些方法也有早期终止支持,在已知的最终结果后停止远程和本地操作。
collect
collect 方法很有趣,它可以执行一些额外的步骤。远程节点以正常方式执行所有内容,但它不会在结果上执行最终的 结束 程序,而是发回完全组合的结果。然后,本地线程 会将 远程和本地结果合并为一个值,然后最后完成。这里要记住的键是最终的值不一定是可序列化的,而是来自供应商和 组合 方法的值。https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collector.html#supplier--
数�
count 方法只从每个节点中添加数字。
findAny findFirst
findAny 操作只返回它们找到的第一个值,无论是来自远程节点还是本地。请注意,当发现一个值后,它就不会处理其他值。请注意 findFirst 方法是特殊的,因为它需要排序的中间操作,这在 例外 部分中详细介绍。
最大分钟
maxmin 方法在每个节点上找到对应的 min 或 max 值,然后在本地执行最终缩减,以确保返回所有节点中的 min 或 max。
reduce
各种减少方法 123 将按顺序化结果,与累计者可以尽可能多。然后,如果提供,它将在本地整合本地和远程结果。请注意,这意味着来自 combiner 的值不必是 Serializable。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat