Hadoop—SequenceFile文件的数据格式(1)

一: 概述

1 SequenceFile是Hadoop为例存储二进制的<k,v>而设计的一种平面文件。
2 SequenceFile的key和value是writable或者writable子类。
3 SequenceFile的存储不按照key排序,内部类Writer提供了append方法。
4 SequenceFile作为一个容器,可以将小文件打包到SequenceFile,高效对小文件进行存储和处理。

二:.SequenceFile 有三种压缩态

1 Uncompressed – 未进行压缩的状
  2.record compressed - 对每一条记录的value值进行了压缩(文件头中包含上使用哪种压缩算法的信息)
  3. block compressed – 当数据量达到一定大小后,将停止写入进行整体压缩,整体压缩的方法是把所有的keylength,key,vlength,value 分别合在一起进行整体压缩
Writer : Uncompressed records
RecordCompressWriter : Record-compressed files, only compress values
BlockCompressWriter : Block-compressed files, both keys & values are collected in ‘blocks’ separately and compressed. The size of the ‘block’ is configurable

三:特点

优点

1 支持基于record和block的压缩

2 支持splittable,能够为Mapreduce作为输入分片

3 修改简单,只需要按照业务逻辑修改,不要考虑具体存储格式

缺点

合并后的文件不易查看。hadoop fs -cat看不到,hadoop fs -text可以看到。

四:扩展实现:

4.1 MapFile 一个key-value 对应的查找数据结构,由数据文件/data 和索引文件 /index 组成,数据文件中包含所有需要存储的key-value对,按key的顺序排列。索引文件包含一部分key值,用以指向数据文件的关键位置
  4.2 SetFile – 基于 MapFile 实现的,他只有key,value为不可变的数据。
  4.3 ArrayFile – 也是基于 MapFile 实现,他就像我们使用的数组一样,key值为序列化的数字。
  4.4 BloomMapFile – 他在 MapFile 的基础上增加了一个 /bloom 文件,包含的是二进制的过滤表,在每一次写操作完成时,会更新这个过滤表。

猜你喜欢

转载自blog.csdn.net/qq_43688472/article/details/85260840