Spark-合并所有执行器的过滤器结果

时间:2018-11-23 09:00:53

标签: java apache-spark hazelcast

我的流媒体工作中有3个执行者,这是从Kafka那里消耗的。执行程序数取决于主题中的分区数。当从该主题消耗一条消息时,我将在Hazelcast上开始查询。每个执行程序都通过对hazelcast的某些过滤操作找到结果,并返回重复的结果。因为当执行程序返回数据并且其他执行程序找到相同的数据时,数据状态不会更新。

我的问题是,有没有一种方法可以将所有结果仅合并到执行者在流传输过程中找到的一个列表中?

2 个答案:

答案 0 :(得分:0)

Spark执行程序分布在整个群集中,因此,如果您尝试在整个群集中重复数据删除。因此,重复数据删除非常困难。您有以下选择

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

我希望这对您有帮助

答案 1 :(得分:0)

为避免重复数据读取,您需要将偏移量保持在HBase中首选的位置,并且每次从Kafka使用数据时,都应从HBase读取数据,然后检查已消耗的每个主题的偏移量,然后开始读取并编写它。每次成功写入后,必须更新偏移量计数。

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