如何在使用spark的有状态操作updatestatebykey时保持实时性

8cdiaqws  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(284)

首先是虚构的用例。假设我有一个元组流 (user_id, time_stamp, login_ip) . 我想保持每个用户的最后登录ip在5秒的粒度。
使用Spark流,我可以使用 updateStateByKey 方法来更新此Map。问题是,随着数据流的不断到来,每个时间间隔的rdd都变得越来越大,因为 user_ids 被看见了。过了一段时间,Map会变大,维护时间会变长,无法实现结果的实时传递。
请注意,这只是一个简单的例子,我提出了显示问题。真正的问题可能更复杂,而且确实需要实时交付。
关于如何解决这个问题有什么想法(在spark以及其他解决方案中都是好的)?

oaxa6hgo

oaxa6hgo1#

你不太了解 Map . 您提供的函数只是更新与一个键关联的状态,spark则完成其余的操作。特别是它在维护一个像 RDD 一系列的键-状态对 DStream . 因此,状态的存储和更新是像其他一样分布的。如果更新速度不够快,您可以通过添加更多工人来扩展。

相关问题