我正在使用updateStateByKey()
操作来维护我的Spark Streaming应用程序中的状态。输入数据来自Kafka主题。
我必须维护的状态包含~100000个键,我想在每次更新状态时避免随机播放,有任何提示吗?
答案 0 :(得分:2)
链接到Tathagat Das对同一问题的回答:
https://www.mail-archive.com/user@spark.apache.org/msg43512.html
以下是文字:
默认情况下,mapWithState()
和updateStateByKey()
都使用HashPartitioner
,并在应用了状态操作的键值DStream
中对键进行哈希处理。新数据和状态是完全相同的分区中的分区,因此来自新数据(来自输入DStream
)的相同键被混洗并与已经分区的状态RDD共同定位。因此,新数据在同一台机器中被带到相应的旧状态然后
应用状态映射/更新功能。
每次都没有洗牌状态,每批次只有一批新数据被洗牌
答案 1 :(得分:0)
updateStateByKey将Partitioner作为第二个参数。 http://spark.apache.org/docs/1.6.0/api/scala/index.html#org.apache.spark.streaming.dstream.PairDStreamFunctions