開發者學堂課程【資料湖 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 優化表存儲層的資料組織