我有非常多的密钥和有限的簇大小。
我正在使用mapWithState
来更新我的州。随着新数据的出现,密钥数量增加。当我进入火花的存储选项卡时,UI MapWithStateRDD
始终存储在内存中。
源代码MapWithStateDstream.Scala的第109行 当存储级别设置为MEMORY_ONLY时,将调用方法持久性。 这是否意味着如果我有太多的密钥,我的应用程序将崩溃?
答案 0 :(得分:2)
当我去了火星UI MapWithStateRDD的存储选项卡时 总是存储在内存中
Spark使用它自己的HashMap
OpenHashMapBasedStateMap
实现来内部存储状态。这意味着值存储在内存中,而不是存储在持久性存储中。
这是否意味着如果我有太多密钥,我的应用程序会崩溃?
这意味着您的群集需要有足够的资源来同时存储所有密钥,因为状态是 in-memory 。如果你有限,你需要优化你保存的状态以确保它们都适合。否则,考虑为你的州使用外部持久存储。