hive on spark執行速度慢

Jeff_Shi發表於2019-01-22

星環hive on spark執行速度慢

因為task的啟動數量是根據hdfs底層的block數量來定,在 block 資料量偏少的情況下,單個任務執行的時間就少,那麼任務開啟的開銷很可能佔據總開銷的大量比例。現在因為block檔案數量龐大,導致task啟動數量巨大,過多的執行緒將導致排隊延時的增加,嚴重影響sql的執行效率,所以對 block 有效的合併處理有助於促進語句執行的高效性 於是開啟automerge開關: set ngmr.partition.automerge=true; 它兩種配置合併後Task任務量方法

“ngmr.partition.mergesize = n”,表示將 n 個 block 安排給單個執行緒處理。 “ngmr.partition.mergesize.mb = m”,表示一個 task 負責處理大小為 m 的資料量(單位 為 MBytes)可以根據需要僅設定這兩個引數其中之一,預設使用方法 2 來控制,如果需要使用方法 1,需要將 mergesize.mb 設為-1。

如果已知資料來源中小檔案過多,最好在向新表匯入資料之前就開啟automerge 開關,使一個 Task 處理多個 block。因為同屬一個 Task 的結果將被返回在同一 個檔案中,因此匯入資料時做任務的合併處理可達到小檔案合併效果。然後關閉automerge 開關,今後都不用再對該表開啟。 除了檢查 block 的大小,還可以通過在 4040 埠檢視任務第一階段 Tasks 的數量和每Task 的執行時間判斷是否需要 automerge。第一階段的 Task 負責 Map 端任務,預設每個Task 對應一個 block,所以如果第一階段 Task 過多而且單個執行時間短,表示小體積 block 多,Task 執行效率低,需要啟用 automerge

相關文章