hadoop自帶的訪問小檔案訪問解決方案

2021-07-04 04:30:46 字數 1450 閱讀 9478

現實場景;

系統中,存在大量的小檔案訪問,比如檔案,一般在幾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...