我正在運行一個簡單的查詢,如下所示(類似形式)
INSERT OVERWRITE table TABLE2
PARTITION(COLUMN)
SELECT *
FROM TABLE1
明智的查詢語法沒有任何問題。
TABLE2 是空的,并且 TABLE1 的總大小在 HDFS 中為 2gb(存盤為 parquet 并進行了快速壓縮)
當我在 hive 中運行查詢時,我看到啟動了 17 個 map 任務和 0 個 reducer 任務。
我注意到大部分地圖任務在一分鐘內完成。但是其中一項地圖任務需要很長時間。就像表中的所有資料都將用于該地圖任務。
整個查詢最終因容器物理記憶體限制錯誤而失敗。
為什么會發生或可能發生這種情況的任何原因?
uj5u.com熱心網友回復:
這可能是因為某些磁區比其他磁區大。
嘗試通過添加分發來觸發減速器任務
INSERT OVERWRITE table TABLE2
PARTITION(COLUMN)
SELECT *
FROM TABLE1
DISTRIBUTE BY COLUMN
此外,您可以向 DISTRIBUTE BY 添加一些其他具有低基數的均勻分布的列以增加并行度:
DISTRIBUTE BY COLUMN, COLUMN2
如果 COLUMN2 具有高基數,它會在每個磁區中產生過多的檔案,如果列值分布不均勻(傾斜),則會導致 reducer 傾斜,因此使用低基數、均勻分布的列或確定性很重要具有相同屬性的函式,如 substr() 等。
或者也嘗試增加映射器并行度并檢查它是否有幫助:https : //stackoverflow.com/a/48487306/2700344
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/409299.html
標籤:
