現實場景;在
系統中,存在大量的小檔案訪問,比如檔案,一般在幾m以內,
1),但是hdfs預設block大小是64m,如果直接訪問在hadoop中,將極大的消耗namenode的資源。直接放在hadoop檔案系統中,大多只是做歸檔分析用,所以,我們就想能不能定期歸檔。
2),放在hbase中,由於hbase的value最大長度是64kb,而很多小檔案又大過這個級別。hbase當時的設計是為了儲存網頁元素這樣的小資料,頂多幾k,如果儲存1m左右的小檔案,還是不合適的。
對於小檔案問題,
hadoop
本身也提供了幾個解決方案,分別為:
hadoop archive
,sequence file
和combinefileinputformat
。
(1)
hadoop archive
hadoop archive
或者har
,是乙個高效地將小檔案放入
hdfs
塊中的檔案存檔工具,它能夠將多個小檔案打包成乙個
har檔案,這樣在減少
namenode
記憶體使用的同時,仍然允許對檔案進行透明的訪問。
使用har
時需要兩點,第一,對小檔案進行存檔後,原檔案並不會自動被刪除,需要使用者自己刪除;第二,建立
har檔案的過程實際上是在執行乙個
mapreduce
作業,因而需要有乙個
hadoop
集群執行此命令。
該方案需人工進行維護,適用管理人員的操作,而且har檔案一旦建立,archives便不可改變,不能應用於多使用者的網際網路操作。
(2)
sequence file
sequence file
由一系列的二進位制
key/value
組成,如果為
key小檔名,
value
為檔案內容,則可以將大批小檔案合併成乙個大檔案。
hadoop-0.21.0
中提供了
sequencefile
,包括writer
,reader
和sequencefilesorter
類進行寫,讀和排序操作。
該方案對於小檔案的訪問都比較自由,不限制使用者和檔案的多少,但是sequencefile檔案不能追加寫入,適用於一次性寫入大量小檔案的操作。
(3)
combinefileinputformat
combinefileinputformat
是一種新的
inputformat
,用於將多個檔案合併成乙個單獨的
split
,另外,它會考慮資料的儲存位置。
Hadoop小檔案歸檔
hdfs檔案的元資料存放在namenode,大量的小檔案會導致namennode記憶體耗盡。hdfs提供了一種針對小檔案的歸檔方案,namenode將多個小檔案歸檔後的檔案視為乙個整體,所以可以大大降低元資料的開銷。但是對於使用者訪問來說卻是透明的,仍然可以可以對每個檔案單獨訪問。檔案歸檔需要執行m...
Hadoop小檔案優化
1 影響namenode的壽命,因為檔案元資料儲存在namenode的記憶體中 2 影響計算引擎的任務數量,比如每個小的檔案都會生成乙個map任務 1 合併小檔案 對小檔案進行歸檔 har 自定義inputformat將小檔案儲存成sequencefile文 件。2 採用combinefileinp...
hadoop 小檔案解決方案
基於hadoop sequencefile的小檔案解決方案 一 概述 小檔案是指檔案 size 小於hdfs 上block 大小的檔案。這樣的檔案會給 hadoop 的擴充套件性和效能帶來嚴重問題。首先,在 hdfs 中,任何 block 檔案或者目錄在記憶體中均以物件的形式儲存,每個物件約佔 15...