首页 > 其他 > 详细

hadoop的SequenceFile

时间:2014-04-26 06:38:13      阅读:624      评论:0      收藏:0      [点我收藏+]

hadoop中的SequenceFile提供了一种持久存储二进制k-v键值对的数据结构。和B-tree不同,SequenceFile不能支持对指定key的修改,增加或删除。整个文件只能以追加的方式写入数据。

bubuko.com,布布扣

 

SequenceFile有三种存储格式:非压缩格式,记录压缩格式和分块压缩格式;

bubuko.com,布布扣

每种格式都包含一个Header,这个Header可以帮助读取方识别存储格式;

1. 包括key值和value的Class信息,读取方可以通过反射机制实例化这些类。

2. 版本 version number

3. 存储数据的格式,如果是压缩的格式,则还会提供压缩编码的class name信息;

bubuko.com,布布扣

SequenceFile还可以包含一个二级k-v结构的列表,作为整个SequenceFile的metadata;

SequenceFile的元数据信息中只能存储text-text类型的数据,元数据是在SequenceFile的Writer初始化的时候被写入的,因此元数据是不能被更改的。

元数据(摘自维基百科):其它文件保存信息常常伴随着文件自身保存在文件系统中。文件长度可能是分配给这个文件的区块数,也可能是这个文件实际的字节数。文件最后修改时间也许记录在文件的时间戳中。有的文件系统还保存文件的创建时间,最后访问时间及属性修改时间。(不过大多数早期的文件系统不记录文件的时间信息)其它信息还包括文件设备类型(如:区块数,字符集,套接口,子目录等等),文件所有者的ID,组ID,还有访问权限(如:只读,可执行等等)。

bubuko.com,布布扣

SequenceFile的文件存储有三种格式,其中非压缩和记录压缩两个格式非常类似;调用append方法来添加记录时,会append一个记录(record)到SequenceFile,Record包括:

整体record的长度(key长度+value长度);key长度;key;value;(key,value都是raw格式数据)

记录压缩和非压缩的区别仅在于,value是否是被压缩的,并且压缩时会提供一个压缩编码类;

bubuko.com,布布扣

Block压缩格式相对比较复杂;数据在达到一个阈值前不会被写入,当达到阈值之后,所有的key和value都会被集中压缩,并生成keys的长度的list以及values的长度;两个块记录中间存在一个同步标记(sync marker)

如上图,每个块记录会记录buffer的记录数,还包含key长度的列表,keys列表,value长度列表,value列表;

Hadoop的SequenceFile是其他文件的基础,例如:MapFile, SetFile, ArrayFile and BloomMapFile.

关于Sync标记:

a sync point is a point in the stream which can used by to resynchronize with a record boundary if the reader is "lost" - for example after seeking to an arbitrary position on the stream.

hadoop的SequenceFile,布布扣,bubuko.com

hadoop的SequenceFile

原文:http://www.cnblogs.com/cresports/p/3689423.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!