如何在使用Spark的有状态操作updateStateByKey时保持实时

时间:2014-07-07 19:43:58

标签: hadoop bigdata apache-spark spark-streaming

首先是虚构的用例。我们假设我有一组元组(user_id, time_stamp, login_ip)。我希望以5秒的粒度维护每个用户的最后一次登录IP。

使用Spark流,我可以使用updateStateByKey方法更新此地图。问题是,随着数据流不断涌现,每个时间间隔的RDD变得越来越大,因为可以看到更多的user_ids。在一段时间之后,地图将变得如此之大以至于维持它需要更长的时间,因此无法实现结果的实时传递。

请注意,这只是我提出来展示问题的一个简单示例。真正的问题可能更复杂,真正需要实时交付。

如何解决这个问题的任何想法(在Spark以及其他解决方案都会很好)?

1 个答案:

答案 0 :(得分:2)

您还没有完全更新Map。您提供的功能只是更新与一个键关联的状态,而Spark正在完成剩下的工作。特别是它为你维护一个类似地图的RDD关键状态对 - 实际上,它们是一系列DStream。因此,状态的存储和更新就像其他一切一样分布。如果更新速度不够快,您可以通过添加更多工作人员来扩展。