SequenceFile介紹(轉)


理解點:

1、二進制數據格式,在hadoop上進行mr任務時使用,一般是中間過程mr的輸入輸出數據

2、有一定的格式:頭部+內容。頭部標示SEQ

3、可通過read讀取,

 ${JAVA_HOME}/bin/java -cp ${HADOOP_LIB}/hadoop-2-core.jar:${HADOOP_LIB}/commons-logging-1.0.4.jar:${bin} sequencefile.SequenceFileReader $fileName

4、讀寫會用到用到commons-logging-1.0.4.jar  hadoop-2-core.jar  sequencefile.env  sequencefile.jar 等

 

以下轉載

SequeceFile是 Hadoop API提供的一種二進制文件支持。這種二進制文件直接將<key, value>對序列化到文件中。一般對小文件可以使用這種文件合並,即將文件名作為key,文件內容作為value序列化到大文件中。這種文件格式 有以下好處
1)支持壓縮,且可定制為基於Record或Block壓縮(Block級壓縮性能較優)
2)本地化任務支持:因為文件可以被切分,因此MapReduce任務時數據的本地化情況應該是非常好的。
3)難度低:因為是Hadoop框架提供的API,業務邏輯側的修改比較簡單。
壞處是需要一個合並文件的過程,且合並后的文件將不方便查看。

SequenceFile 是一個由二進制序列化過的key/value的字節流組成的文本存儲文件,它可以在map/reduce過程中的input/output 的format時被使用。在map/reduce過程中,map處理文件的臨時輸出就是使用SequenceFile處理過的。
SequenceFile分別提供了讀、寫、排序的操作類。
SequenceFile的操作中有三種處理方式:
1) 不壓縮數據直接存儲。 //enum.NONE
2) 壓縮value值不壓縮key值存儲的存儲方式。//enum.RECORD
3)key/value值都壓縮的方式存儲。//enum.BLOCK


SequenceFile提供了若干Writer的構造靜態獲取。
//SequenceFile.createWriter();

SequenceFile.Reader使用了橋接模式,可以讀取SequenceFile.Writer中的任何方式的壓縮數據。

三種不同的壓縮方式是共用一個數據頭,流方式的讀取會先讀取頭字節去判斷是哪種方式的壓縮,然后根據壓縮方式去解壓縮並反序列化字節流數據,得到可識別的數據。

流的存儲頭字節格式:
Header:
*字節頭”SEQ”, 后跟一個字節表示版本”SEQ4”,”SEQ6”.//這里有點忘了 不記得是怎么處理的了,回頭補上做詳細解釋
*keyClass name
*valueClass name
*compression boolean型的存儲標示壓縮值是否轉變為keys/values值了
*blockcompression boolean型的存儲標示是否全壓縮的方式轉變為keys/values值了
*compressor 壓縮處理的類型,比如我用Gzip壓縮的Hadoop提供的是GzipCodec什么的..
*元數據 這個大家可看可不看的

所有的String類型的寫操作被封裝為Hadoop的IO API,Text類型writeString()搞定。

未壓縮的和只壓縮values值的方式的字節流頭部是類似的:
*Header
*RecordLength記錄長度
*key Length key值長度
*key 值
*是否壓縮標志 boolean
*values
剩下的大家可看可不看的,並非這個類中主要的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM