問題
你想使用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”)