RocksDB未能获得一个锁

当使用RocksDB作为一个国家商店,您可能需要增加获得SQL配置超时。

写的亚当Pavlacka

去年发表在:2023年2月25日

问题

你想使用RocksDB国家结构的流媒体应用程序商店,当你得到一个错误消息说实例不能被收购。

引起的:. lang。IllegalStateException: RocksDB实例不能被[ThreadId: 742,任务:140.3在3152年阶段,TID 553193]是不公布的[ThreadId: 42岁的任务:140.1在3152年阶段,TID 553083] 10009年之后StateStoreId女士(opId = 0, partId = 140, name =默认)

导致

两个并发的任务不能修改相同的RocksDBStateStore实例。

并发任务试图访问同一状态存储(存储绑定到相同的分区状态维护flatMapGroupsWithState)应该极为罕见。它只能发生如果任务更新存储实例重启了司机在之前尝试终止之前。

删除

信息

突然终止节点,如现货实例终止时,也会导致这个错误。

解决方案

这个错误可以防止国家被损坏。重新启动查询如果遇到这个错误。

如果僵尸的任务是清理他们的资源,花的时间太长了,下一个任务试图获得一个锁,它也将失败。在这种情况下,您应该允许更多的线程清理时间。

设置等待时间的线程配置rocksdb.lockAcquireTimeoutMs在您的SQL配置。该值以毫秒为单位。

% scala火花。sql (“spark.sql.streaming.stateStore.rocksdb设置。lockAcquireTimeoutMs = 20000”)


这篇文章有用吗?