1. 程式人生 > >Hadoop—SequenceFile檔案的資料格式(1)

Hadoop—SequenceFile檔案的資料格式(1)

一: 概述

1 SequenceFile是Hadoop為例儲存二進位制的<k,v>而設計的一種平面檔案。
2 SequenceFile的key和value是writable或者writable子類。
3 SequenceFile的儲存不按照key排序,內部類Writer提供了append方法。
4 SequenceFile作為一個容器,可以將小檔案打包到SequenceFile,高效對小檔案進行儲存和處理。

二:.SequenceFile 有三種壓縮態

1 Uncompressed – 未進行壓縮的狀
  2.record compressed - 對每一條記錄的value值進行了壓縮(檔案頭中包含上使用哪種壓縮演算法的資訊)
  3. block compressed – 當資料量達到一定大小後,將停止寫入進行整體壓縮,整體壓縮的方法是把所有的keylength,key,vlength,value 分別合在一起進行整體壓縮
Writer : Uncompressed records
RecordCompressWriter : Record-compressed files, only compress values
BlockCompressWriter : Block-compressed files, both keys & values are collected in ‘blocks’ separately and compressed. The size of the ‘block’ is configurable

三:特點

優點

1 支援基於record和block的壓縮

2 支援splittable,能夠為Mapreduce作為輸入分片

3 修改簡單,只需要按照業務邏輯修改,不要考慮具體儲存格式

缺點

合併後的檔案不易檢視。hadoop fs -cat看不到,hadoop fs -text可以看到。

四:擴充套件實現:

4.1 MapFile 一個key-value 對應的查詢資料結構,由資料檔案/data 和索引檔案 /index 組成,資料檔案中包含所有需要儲存的key-value對,按key的順序排列。索引檔案包含一部分key值,用以指向資料檔案的關鍵位置
  4.2 SetFile – 基於 MapFile 實現的,他只有key,value為不可變的資料。
  4.3 ArrayFile – 也是基於 MapFile 實現,他就像我們使用的陣列一樣,key值為序列化的數字。
  4.4 BloomMapFile – 他在 MapFile 的基礎上增加了一個 /bloom 檔案,包含的是二進位制的過濾表,在每一次寫操作完成時,會更新這個過濾表。