sequence file序列化文件
介绍
- sequence file是hadoop提供的一种二进制文件存储格式
- 一条数据称之为record(记录),底层直接以<key, value>键值对形式序列化到文件中
优缺点
- 优点
- 二进制格式存储,比文本文件更紧凑
- 支持不同级别压缩(基于record或block压缩)
- 文件可以拆分和并行处理,适用于MapReduce程序
- 局限性
- 二进制文件不方便查看
- 特定于hadoop,只有java api可用于阈值进行交互。尚未提供多语言支持
格式
- 根据压缩类型,有3汇总不用sequence file格式:未压缩格式,record压缩格式,block压缩格式
- sequence file由一个header和多个record组成。以上三种格式均由使用相同的header结构,如下所示:前3个字节为SQE,表示该文件是序列文件,后跟一个字节表示实际版本号(例如SEQ4或SEQ6).HEADER中其他也包括key,valueclass名字,压缩细节,metadata, Sync marker。sync marker同步标记,用于可以读取任意位置的数据
未压缩格式
- 未压缩的sequence file文件由header,record,sync三个部分组成。其中record包含了4个部分:record length(记录长度),key length(键长),key,value
- 每隔几个record(100个字节左右)就有一个同步标记
基于record压缩格式
基于record压缩的sequence file文件由header,record,sync三个部分组成。其中record包含了4个部分:record length(记录长度),key length(键长),key,compressed value(被压缩的值)
基于block压缩格式
- 基于block压缩的sequence file文件由header,block,sync三个部分组成
- block值得是record block,可以理解为多个record记录组成的块。注意这个block和hdfs中分块存储的block(128M)是不同的概念。block中包括:record条数,压缩的key长度,压缩的keys,压缩的value长度,压缩的values。每隔一个block就有一个同步标记
- block压缩比record压缩提供更好的压缩率。使用sequence file时,通常首选块压缩