我正在使用updateStateByKey()操作来维护我的Spark Streaming应用程序中的状态.输入数据来自Kafka主题.
>我想了解DStreams是如何分区的?
>分区如何使用mapWithState()或updateStatebyKey()方法?
>在updateStateByKey()中,对同一节点上处理的给定键执行旧状态和新值?
> updateStateByKey()方法的shuffle有多频繁?
我必须维护的状态包含~100000个密钥,我希望每次更新状态时都避免随机播放,任何提示都要这样做吗?
最佳答案 链接到Tathagat Das对同一问题的答案:
https://www.mail-archive.com/user@spark.apache.org/msg43512.html
以下是文字:
默认情况下,mapWithState()和updateStateByKey()都使用HashPartitioner,并在应用了状态操作的键值DStream中散列键.新数据和状态在完全相同的分区器中进行分区,因此来自新数据(来自输入DStream)的相同键被混洗并与已经分区的状态RDD共同定位.因此,新数据在同一台机器中被带到相应的旧状态然后
应用状态映射/更新功能.
状态不会每次都被洗牌,只有批次的新数据在每批次中被洗牌