hadoop 小檔案解決方案

2021-09-01 03:48:24 字數 2531 閱讀 7399

基於hadoop sequencefile的小檔案解決方案

一、概述

小檔案是指檔案

size

小於hdfs

上block

大小的檔案。這樣的檔案會給

hadoop

的擴充套件性和效能帶來嚴重問題。首先,在

hdfs

中,任何

block

,檔案或者目錄在記憶體中均以物件的形式儲存,每個物件約佔

150byte

,如果有

1000 0000

個小檔案,每個檔案占用乙個

block

,則namenode

大約需要

2g空間。如果儲存

1億個檔案,則

namenode

需要20g

空間。這樣

namenode

記憶體容量嚴重制約了集群的擴充套件。

其次,訪問大量小檔案速度遠遠小於訪問幾個大檔案。

hdfs

最初是為流式訪問大檔案開發的,如果訪問大量小檔案,需要不斷的從乙個

datanode

跳到另乙個

datanode

,嚴重影響效能。最後,處理大量小檔案速度遠遠小於處理同等大小的大檔案的速度。每乙個小檔案要占用乙個

slot

,而task

啟動將耗費大量時間甚至大部分時間都耗費在啟動

task

和釋放task上。

二、hadoop自帶的解決方案

對於小檔案問題,

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

類進行寫,讀和排序操作。如果

hadoop

版本低於

0.21.0

的版本,實現方法可參見

[3]。

該方案對於小檔案的訪問都比較自由,不限制使用者和檔案的多少,但是

sequencefile

檔案不能追加寫入,適用於一次性寫入大量小檔案的操作。

(3)combinefileinputformat

combinefileinputformat

是一種新的

inputformat

,用於將多個檔案合併成乙個單獨的

split

,另外,它會考慮資料的儲存位置。

該方案版本比較老,網上資料甚少,從資料來看應該沒有第二種方案好。

三、小檔案問題解決方案

在原有hdfs基礎上新增乙個小檔案處理模組,具體操作流程如下:

1.   當使用者上傳檔案時,判斷該檔案是否屬於小檔案,如果是,則交給小檔案處理模組處理,否則,交給通用檔案處                理模組處理。

2.  在小檔案模組中開啟一定時任務,其主要功能是當模組中檔案總size大於hdfs上block大小的檔案時,則通                     過sequencefile元件以檔名做key,相應的檔案內容為value將這些小檔案一次性寫入hdfs模組。

3. 同時刪除已處理的檔案,並將結果寫入資料庫。

4.  當使用者進行讀取操作時,可根據資料庫中的結果標誌來讀取檔案。

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

現實場景 在 系統中,存在大量的小檔案訪問,比如檔案,一般在幾m以內,1 但是hdfs預設block大小是64m,如果直接訪問在hadoop中,將極大的消耗namenode的資源。直接放在hadoop檔案系統中,大多只是做歸檔分析用,所以,我們就想能不能定期歸檔。2 放在hbase中,由於hbase...

Hadoop小檔案帶來的問題以及解決方案

小檔案指的是那些size比hdfs的block size 預設64m 小的多的檔案。hadoop適合處理少量的大檔案,而不是大量的 小檔案。首先,在hdfs中,任何block,檔案或者目錄在記憶體中均以物件的形式儲存,每個物件約佔150byte,如果有1000 0000個小檔案,每個檔案占用乙個bl...

HDFS小檔案問題及解決方案

1 概述 小檔案是指檔案size小於hdfs上block大小的檔案。這樣的檔案會給hadoop的擴充套件性和效能帶來嚴重問題。首先,在hdfs中,任何block,檔案或者目錄在記憶體中均以物件的形式儲存,每個物件約佔150byte,如果有1000 0000個小檔案,每個檔案占用乙個block,則na...