問題
你想要逃跑MSCK REPAIR TABLE < TABLE -name>用於同一表的並行命令和正在獲取sockettimeoutexception:讀取超時或內存不足的錯誤消息。
導致
當您試圖向表中添加大量的新分區時MSCK修複與此同時,Hive metastore成為一個限製因素,因為它每秒隻能增加幾個分區。新分區的數量越多,查詢失敗的可能性就越大sockettimeoutexception:讀取超時錯誤或內存不足錯誤消息。
解決方案
您不應該嚐試運行多個MSCK REPAIR TABLE < TABLE -name>並行命令。
Databricks為單個線程使用多個線程MSCK修複默認情況下,它拆分createPartitions ()成批量。通過限製創建的分區數量,它可以防止Hive metastore超時或發生內存溢出錯誤。它還並行地收集快速統計數據(文件的數量和文件的總大小),從而避免了按順序列出metastore文件的瓶頸。這是由spark.sql.gatherFastStats,默認啟用。