HDFS小檔案問題解決方案+SequenceFile簡單介紹
阿新 • • 發佈:2019-01-28
HDFS和MR主要針對大資料檔案來設計,在小檔案處理上效率低.
解決方法是選擇一個容器,將這些小檔案包裝起來,將整個檔案作為一條記錄,可以獲取更高效率的儲存和處理,避免多次開啟關閉流耗費計算資源.
hdfs提供了兩種型別的容器 SequenceFile和MapFile
小檔案問題解決方案
1、在原有HDFS基礎上新增一個小檔案處理模組,具體操作流程如下:
2、當用戶上傳檔案時,判斷該檔案是否屬於小檔案。
如果是,則交給小檔案處理模組處理。
否則,交給通用檔案處理模組處理。
在小檔案模組中開啟一定時任務,其主要功能是當模組中檔案總size大於HDFS上block大小的檔案時,則通過SequenceFile元件以檔名做key,相應的檔案內容為value 將這些小檔案一次性寫入hdfs模組。
3、同時刪除已處理的檔案,並將結果寫入資料庫。
4、當用戶進行讀取操作時,可根據資料庫中的結果標誌來讀取檔案。
SequenceFile
Sequence file由一系列的二進位制key/value組成.
如果key為小檔名,value為檔案內容,則可以將大批小檔案合併成一個大檔案。
Hadoop-0.21.0版本開始中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter類進行寫,讀和排序操作。
該方案對於小檔案的存取都比較自由,不限制使用者和檔案的多少,支援Append追加寫入,支援三級文件壓縮(不壓縮、檔案級、塊級別)。
儲存結構如圖:
SequenceFile儲存
檔案中每條記錄是可序列化,可持久化的鍵值對,提供相應的讀寫器和排序器,寫操作根據壓縮的型別分為3種
Write 無壓縮寫資料
RecordCompressWriter記錄級壓縮檔案,只壓縮值
BlockCompressWrite塊級壓縮檔案,鍵值採用獨立壓縮方式