当我耗尽内存以使用mapWithState维护状态时会发生什么

时间:2016-08-25 05:37:37

标签: apache-spark spark-streaming

我有非常多的密钥和有限的簇大小。 我正在使用mapWithState来更新我的州。随着新数据的出现,密钥数量增加。当我进入火花的存储选项卡时,UI MapWithStateRDD始终存储在内存中。

源代码MapWithStateDstream.Scala的第109行 当存储级别设置为MEMORY_ONLY时,将调用方法持久性。 这是否意味着如果我有太多的密钥,我的应用程序将崩溃?

1 个答案:

答案 0 :(得分:2)

  

当我去了火星UI MapWithStateRDD的存储选项卡时   总是存储在内存中

Spark使用它自己的HashMap OpenHashMapBasedStateMap实现来内部存储状态。这意味着值存储在内存中,而不是存储在持久性存储中。

  

这是否意味着如果我有太多密钥,我的应用程序会崩溃?

这意味着您的群集需要有足够的资源来同时存储所有密钥,因为状态是 in-memory 。如果你有限,你需要优化你保存的状态以确保它们都适合。否则,考虑为你的州使用外部持久存储。