随着时间的推移,Spark状态流增加内存

时间:2018-03-24 15:58:34

标签: apache-spark garbage-collection spark-streaming

我们使用spark结构化流媒体并使用mapGroupWithState在一段时间内聚合数据。当超时发生时,我们使用

删除状态

state.remove()。

我们正在使用神经节来监控群集健康状况。    堆内存在此期间不断增加。   我怀疑即使在状态删除后,旧的状态对象仍然在内存中并且从未清理过。    调用state.remove()时对象会发生什么?   提示很受欢迎。

1 个答案:

答案 0 :(得分:0)

我认为这应该是评论,但我刚刚创建了我的Stack Overflow帐户。

几周前,我在Spark Streaming上遇到了同样的问题。我的状态很大,我需要放弃旧状态。我使用了 mapGroupWithState ,它可以正常工作。刚开始我不了解 state.remove()的工作原理,但是经过几次执行我就明白了。

首先,什么时候调用remove方法?我使用了几分钟的超时时间。在时间到期后停止向该密钥发送消息时,我得到了如何超时和删除工作的信息。事件迭代器为null,state.hasTimedOut为true。

所以我决定将函数划分为if。

if (state.hasTimedOut) {
    state.remove()
    // Here I returned my object totally null
} else {
    // deal with new event
    // update state
    // set time out
}

也许您正在删除状态而不是跳过执行?当时间到期且该键没有事件时,超时将为 true