Hadoop優化及小檔案處理

2021-10-07 19:04:50 字數 1325 閱讀 2600

hadoop本身也提供了幾個解決方案,分別為:hadoop archive,sequence file和combinefileinputformat。

(1) hadoop archive

hadoop archive或者har,是乙個高效地將小檔案放入hdfs塊中的檔案存檔工具,它能夠將多個小檔案打包成乙個har檔案,這樣在減少namenode記憶體使用的同時,仍然允許對檔案進行透明的訪問。

對某個目錄/foo/bar下的所有小檔案存檔成/outputdir/ zoo.har:

hadoop archive -archivename zoo.har -p /foo/bar /outputdir

當然,也可以指定har的大小(使用-dhar.block.size)。

har是在hadoop file system之上的乙個檔案系統,因此所有fs shell命令對har檔案均可用,只不過是檔案路徑格式不一樣,har的訪問路徑可以是以下兩種格式:

har://scheme-hostname:port/archivepath/fileinarchive

har:///archivepath/fileinarchive(本節點)

可以這樣檢視har檔案存檔中的檔案:

hadoop dfs -ls har:///user/zoo/foo.har

輸出:har:///user/zoo/foo.har/hadoop/dir1

har:///user/zoo/foo.har/hadoop/dir2

使用har時需要兩點,第一,對小檔案進行存檔後,原檔案並不會自動被刪除,需要使用者自己刪除;第二,建立har檔案的過程實際上是在執行乙個mapreduce作業,因而需要有乙個hadoop集群執行此命令。

此外,har還有一些缺陷:第一,一旦建立,archives便不可改變。要增加或移除裡面的檔案,必須重新建立歸檔檔案。第二,要歸檔的檔名中不能有空格,否則會丟擲異常,可以將空格用其他符號替換(使用-dhar.space.replacement.enable=true 和-dhar.space.replacement引數)。

(2) sequence file

sequence file由一系列的二進位制key/value組成,如果為key小檔名,value為檔案內容,則可以將大批小檔案合併成乙個大檔案。

hadoop-0.21.0中提供了sequencefile,包括writer,reader和sequencefilesorter類進行寫,讀和排序操作。

(3)combinefileinputformat

combinefileinputformat是一種新的inputformat,用於將多個檔案合併成乙個單獨的split,另外,它會考慮資料的儲存位置。

Hadoop小檔案優化

1 影響namenode的壽命,因為檔案元資料儲存在namenode的記憶體中 2 影響計算引擎的任務數量,比如每個小的檔案都會生成乙個map任務 1 合併小檔案 對小檔案進行歸檔 har 自定義inputformat將小檔案儲存成sequencefile文 件。2 採用combinefileinp...

Hadoop小檔案歸檔

hdfs檔案的元資料存放在namenode,大量的小檔案會導致namennode記憶體耗盡。hdfs提供了一種針對小檔案的歸檔方案,namenode將多個小檔案歸檔後的檔案視為乙個整體,所以可以大大降低元資料的開銷。但是對於使用者訪問來說卻是透明的,仍然可以可以對每個檔案單獨訪問。檔案歸檔需要執行m...

關於hadoop處理大量小檔案情況的解決方法

小檔案是指那些size比hdfs的block size 預設64m 小的多的檔案。任何乙個檔案,目錄和bolck,在hdfs中都會被表示為乙個object儲存在namenode的記憶體中,每乙個object占用150bytes的記憶體空間。所以,如果有10milion個檔案,每乙個檔案對應乙個blo...