顺序文件提供了二进制key/value对的永久存储DS,也可以作为小文件的容器,也就是把小文件包装起来,获得更高效的存储和处理,比如将整个文件作为一条记录处理
顺序文件:文件头+一条或多条记录
记录的结构与是否启用压缩有关
没有 record length(4 byte)+ key length(4 bytes)+key + value
启用 格式与上面相同 不过除了key值都要按照header定义的codec进行压缩
块(block)压缩:一次对多条记录压缩,压缩效率更高,可利用记录间的相似性 io.seqfile.blocksize 1MB
每个新块的开始都需要插入同步标识 格式如下:
num of records Compressed key len Compressed keys Compressed value len Compressed values
写文件:指定key 和 value 的类型 Sequence.createWriter
读文件:new SequenceFile.Reader ReflectionUtils.newInstance 分别获得key 和 value 的类型
搜索给定位置:
(1)seek(a) a 是边界位置 否则IOEcxption
(2)通同步点找到边界记录 SequenceFile.Reader sync(a) 方法可以将读取位置定位到a之后的下一个同步点
SeauenceFile.sync() 插入同步点
以文本形式显示顺序文件内容: Hadoop fs -text number.seq | head
排序和合并顺序文件: hadoop jar ***.jar sort -r 1 \
-inputFormat **
-outputFormat **
-outKey
-outValue
file sorted