天天看點

對 Hive 數倉表進行高效小檔案合并 | 學習筆記

開發者學堂課程【資料湖 JindoFS + OSS 實操幹貨36講:對 Hive 數倉表進行高效小檔案合并】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/833/detail/13982

對 Hive 數倉表進行高效小檔案合并

内容介紹

一、背景介紹

二、主要功能

(1)小檔案如何産生

l  動态分區插入資料,産生大的小檔案,進而導緻 map 數劇增。

l  reduce 數量越多,小檔案也越多(r educe 的個數和輸出檔案是對應的)。

l  資料源本身就包含大量的小檔案。

(2)小檔案帶來的問題

l  小檔案會開很多 map, 一個 map 開一個 JVM 去執行,是以這些任務的初始化,啟動,執行會浪費大量的資源,嚴重影響性能。

l  小檔案會給底層檔案系統帶來很大壓力,如在在 HDFS 中,每個小檔案對象約占150byte,如果小檔案過多會占用大量記憶體。這樣 NameNode 記憶體容量嚴重制約了叢集的擴充

(3)小檔案解決方案

l  從小檔案産生的途經就可以從源頭上控制小檔案數量

l  使用 Sequencefile 作 為表存儲格式,不要用 textfile,在一定程度上可以減少小檔案。

l  減少 reduce 的 數量(可以使用參數進行控制)。

l  少用動态分區,用時記得按 distribute by 分區。 

l  對于已有的小檔案,我們可以通過以下幾種方案解決

l  通過參數進行調節,設定 map/reduce 端的相關參數。

l  重建表,建表時減少 reduce 數量。

l  使用 hadoop archive 指令把小檔案進行歸檔。

(1)JindoTable

l  JindoTable 提供表或分區級别的熱度統計、存儲分層和表檔案優化的功能,常見指令如下:

l  -accessStat/-leastUseStat

l  -cache/-uncache/-archive/-unarchive/-archiveTable/-unarchiveTable/ -status

l  -optimize

l  -showTable/-showPartition/-listTables

l  -dumpmc

l  -moveTo

(2)Hive 數倉表小檔案合并

l  Jindo table- -showTable/-showPartition -t -p

l  顯示表格或者分區的狀态,如果表檔案過小會提示檔案過小

l  Jindo table - optimize 優化表存儲層的資料組織