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

标签 hadoop bigdata apache-spark spark-streaming

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

使用 Spark 流,我可以使用 updateStateByKey 方法更新这张 map 。问题是,随着数据流不断涌来,每个时间间隔的RDD越来越大,因为看到了更多的user_ids。一段时间后, map 会变得很大,维护时间会变长,无法实现结果的实时传递。

请注意,这只是我想出的一个简单示例来说明问题。实际问题可能更复杂,确实需要实时交付。

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

最佳答案

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

关于hadoop - 使用Spark的有状态操作updateStateByKey如何保持实时性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618549/

相关文章:

java.io.IOException : Could not read footer for file FileStatus when trying to read parquet file from Spark cluster from IBM Cloud Object Storage

apache-spark - 在 Spark ML 管道中缓存中间结果

hadoop - 无法从第二次Oozie工作流程作业中启动Hive Action

apache - 数据节点错误:NameSystem.getDatanode

java - 使用Hadoop时如何自定义FileInputFormat以在Java中读取多行文件?

hadoop - 根据我的映射器代码中的某些逻辑,将我的映射器中的一些数据(行)写入单独的目录

Java & Pig - 使用 PigServer 将参数传递给 pig 脚本

r - 服务器上的 ff 包... read.table.ffdf "cannot change working directory"

apache-spark - 无法使用 Cygwin 在 Windows 上启动 Apache Spark

java - 对从 REST API 中过滤 JSON 对象的疑问