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”)


這篇文章有用嗎?