並行運行MSCK REPAIR TABLE時出錯

不要並行運行“MSCK REPAIR”命令。它會導致讀取超時或內存不足的錯誤消息。

寫的ashritha.laxminarayana

最後發布時間:2022年5月23日

問題

你想要逃跑MSCK REPAIR TABLE < TABLE -name>用於同一表的並行命令和正在獲取sockettimeoutexception:讀取超時或內存不足的錯誤消息。

導致

當您試圖向表中添加大量的新分區時MSCK修複與此同時,Hive metastore成為一個限製因素,因為它每秒隻能增加幾個分區。新分區的數量越多,查詢失敗的可能性就越大sockettimeoutexception:讀取超時錯誤或內存不足錯誤消息。

解決方案

您不應該嚐試運行多個MSCK REPAIR TABLE < TABLE -name>並行命令。

Databricks為單個線程使用多個線程MSCK修複默認情況下,它拆分createPartitions ()成批量。通過限製創建的分區數量,它可以防止Hive metastore超時或發生內存溢出錯誤。它還並行地收集快速統計數據(文件的數量和文件的總大小),從而避免了按順序列出metastore文件的瓶頸。這是由spark.sql.gatherFastStats,默認啟用。