Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 如何在使用Spark';s有状态操作updateStateByKey_Hadoop_Bigdata_Apache Spark_Spark Streaming - Fatal编程技术网

Hadoop 如何在使用Spark';s有状态操作updateStateByKey

Hadoop 如何在使用Spark';s有状态操作updateStateByKey,hadoop,bigdata,apache-spark,spark-streaming,Hadoop,Bigdata,Apache Spark,Spark Streaming,首先是虚构的用例。假设我有一个元组流(用户id、时间戳、登录ip)。我想将每个用户的最后登录IP保持在5秒的粒度 使用Spark streaming,我可以使用updateStateByKey方法来更新此地图。问题是,随着数据流的不断到来,每个时间间隔的RDD越来越大,因为看到的用户ID越来越多。过了一段时间,地图将变得如此之大,以至于维护它需要更长的时间,因此无法实现结果的实时交付 请注意,这只是我提出的一个简单示例来说明问题。真正的问题可能更复杂,真正需要实时交付 有没有关于如何解决这个问题

首先是虚构的用例。假设我有一个元组流
(用户id、时间戳、登录ip)
。我想将每个用户的最后登录IP保持在5秒的粒度

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

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


有没有关于如何解决这个问题的想法(在Spark和其他解决方案中都是好的)

您没有完全更新
地图
。您提供的函数只是更新与一个键关联的状态,Spark正在执行其余的操作。特别是它为您维护了一个类似于
RDD
的键-状态对映射——实际上是一系列键-状态对,一个
DStream
。因此,状态的存储和更新与其他内容一样是分布式的。如果更新速度不够快,您可以通过添加更多员工来扩大规模。

谢谢。很高兴看到你回答这个问题。我所说的
Map
实际上是指类似于
RDD
的Map,很抱歉不准确。刚刚开始学习Spark,我没有意识到的是,
RDD
的存储也是分布式的,不同密钥的状态是同时更新的。我将与工人的数量进行比较,以了解结果。谢谢。在一段时间内,这个州在发展。。我得到数组越界异常。。在第30分钟,当我将工人增加到2名时,我在第40分钟得到了相同的异常。。因此,在某个时候,它会增长,如何克服它?@mithra你在邮件列表中找到你问题的答案了吗?我也很好奇。我的一个解决方案是为这个“映射”中的每个条目都设置一个计数器,当条目在过去的K次中没有更新时,我通过在updateStateByKey中返回None来删除条目。实际上,您不需要删除旧的条目,Spark应该注意这一点。肖恩是对的,如果你记录了很多“钥匙”,你需要足够的内存来存储它们。