问题
你想使用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”)