【问题标题】:Spark - combine filter results from all executorsSpark - 结合所有执行者的过滤结果
【发布时间】:2018-11-23 09:00:53
【问题描述】:

我的 spark 流式传输作业中有 3 个执行器,这些执行器从 Kafka 消耗。执行者计数取决于主题中的分区计数。当从这个主题消费一条消息时,我开始查询 Hazelcast。每个 executor 从 hazelcast 上的一些过滤操作中找到结果并返回重复的结果。因为当执行器返回数据并且其他执行器找到相同的数据时,数据状态不会更新。

我的问题是,有没有办法将所有结果合并到一个列表中,由执行者在流式传输期间找到?

【问题讨论】:

  • 使用累加器...请分享您的代码..
  • 感谢您的评论。我详细说明了我的问题。累加器仍在桌面上,我正在阅读它。

标签: java apache-spark hazelcast


【解决方案1】:

Spark Executor 分布在集群中,因此如果您尝试跨集群删除重复数据。所以去重很困难。您有以下选择

  1. 使用累加器。- 这里的问题是累加器在作业运行时不一致,您最终可能会读取过时的数据
  2. 其他选项是将此工作卸载到外部系统。 - 将您的输出存储在一些可以对其进行重复数据删除的外部存储中。 (可能是 HBase)。该存储系统的效率在这里成为关键。

希望对你有帮助

【讨论】:

    【解决方案2】:

    为了避免重复数据读取,您需要在某处维护偏移量,在 HBase 中首选,并且每次从 Kafka 消费数据时,您从 HBase 读取它,然后检查每个已消费主题的偏移量,然后开始读取并写下来。每次写入成功后,必须更新偏移量。

    您认为这样可以解决问题吗?

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 2016-12-21
      • 1970-01-01
      相关资源
      最近更新 更多