今天要推薦的一篇文章發表在知名雲端儲存體提供者 Cloudera 的部落格,本文細緻且圖文並茂地講解了 Hadoop 的幾種典型檔案結構及他們之前的關係。NoSQLFan 將主要內容翻譯整理如下(如有錯漏,歡迎指正): 1.Hadoop’s SequenceFile
SequenceFile 是 Hadoop 的一個重要資料檔案類型,它提供key-value的儲存,但與傳統key-value儲存(比如hash表,btree)不同的是,它是appendonly的,於是你不能對已存在的key進行寫操作。每一個key-value記錄如下圖,不僅儲存了key,value值,也儲存了他們的長度。
SequenceFile 有三種壓縮態: Uncompressed – 未進行壓縮的狀態 Record Compressed - 對每一條記錄的value值進行了壓縮(檔案頭中包含上使用哪種壓縮演算法的資訊) Block-Compressed – 當資料量達到一定大小後,將停止寫入進行整體壓縮,整體壓縮的方法是把所有的keylength,key,vlength,value 分別合在一起進行整體壓縮
檔案的壓縮態標識在檔案開頭的header資料中。
在header資料之後是一個Metadata資料,他是簡單的屬性/值對,標識檔案的一些其他資訊。Metadata 在檔案建立時就寫好了,所以也是不能更改的。
2.MapFile, SetFile, ArrayFile 及 BloomMapFile
SequenceFile 是Hadoop 的一個基礎資料檔案格式,後續講的 MapFile, SetFile, ArrayFile 及 BloomMapFile 都是基於它來實現的。 MapFile – 一個key-value 對應的尋找資料結構,由資料檔案/data 和索引檔案 /index 組成,資料檔案中包含所有需要儲存的key-value對,按key的順序排列。索引檔案包含一部分key值,用以指向資料檔案的關鍵位置。 SetFile – 基於 MapFile 實現的,他只有key,value為不可變的資料。 ArrayFile – 也是基於 MapFile 實現,他就像我們使用的數組一樣,key值為序列化的數字。 BloomMapFile – 他在 MapFile 的基礎上增加了一個 /bloom 檔案,包含的是二進位的過濾表,在每一次寫操作完成時,會更新這個過濾表。
原文連結:Hadoop I/O: Sequence, Map, Set, Array, BloomMap Files
相關連結:
1.圖形化理解 HBase 資料寫操作、壓縮操作過程
2.HBase 檔案結構圖
from: http://blog.nosqlfan.com/html/1217.html