理解點:java
一、二進制數據格式,在hadoop上進行mr任務時使用,通常是中間過程mr的輸入輸出數據框架
二、有必定的格式:頭部+內容。頭部標示SEQoop
三、可經過read讀取,性能
${JAVA_HOME}/bin/java -cp ${HADOOP_LIB}/hadoop-2-core.jar:${HADOOP_LIB}/commons-logging-1.0.4.jar:${bin} sequencefile.SequenceFileReader $fileNameorm
四、讀寫會用到用到commons-logging-1.0.4.jar hadoop-2-core.jar sequencefile.env sequencefile.jar 等排序
如下轉載ip
SequeceFile是 Hadoop API提供的一種二進制文件支持。這種二進制文件直接將<key, value>對序列化到文件中。通常對小文件可使用這種文件合併,即將文件名做爲key,文件內容做爲value序列化到大文件中。這種文件格式 有如下好處:
1)支持壓縮,且可定製爲基於Record或Block壓縮(Block級壓縮性能較優)
2)本地化任務支持:由於文件能夠被切分,所以MapReduce任務時數據的本地化狀況應該是很是好的。
3)難度低:由於是Hadoop框架提供的API,業務邏輯側的修改比較簡單。
壞處是須要一個合併文件的過程,且合併後的文件將不方便查看。hadoop
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.BLOCKinput
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
剩下的你們可看可不看的,並不是這個類中主要的。it