MapReduce学习(四):Hadoop两种存储方式SequenceFile和MapFile

1. Hadoop的两种存储方式简介

(1)无Hadoop的两种数据存储方式:

SequenceFile方式: 无序存储

MapFile方式: 会对key建立索引文件,value按key顺序存储

(2)其中基于MapFile的结构具体包括:

•ArrayFile 像我们使用的数组一样,key值为序列化的数字

•SetFile 他只有key,value为不可变的数据

•BloomMapFile 在 MapFile 的基础上增加了一个 /bloom 文件,包含的是二进制的过滤表,在每一次写操作完成时,会更新这个过滤表。

2. SequenceFile存储方式

(1)SequeceFile存储格式简介:

SequenceFile的存储类似于Log文件,所不同的是Log File的每条记录的是纯文本数据,而SequenceFile的每条记录是可序列化的字符数组。

(2)SequeceFile完成新纪录的添加操作的API是:

fileWriter.append(key,value)

可以看到,每条记录以键值对的方式进行组织,但前提是Key和Value需具备序列化和反序列化的功能

补充:Hadoop预定义了一些Key Class和Value Class,他们直接或间接实现了Writable接口,满足了该功能,包括:

Text 等同于Java中的String

IntWritable 等同于Java中的Int

BooleanWritable 等同于Java中的Boolean

(3)SequeceFile的数据压缩方式:

SeqeunceFile支持两种格式的数据压缩,分别是:record compression和block compression。

record compression如上图所示,是对每条记录的value进行压缩

block compression是将一连串的record组织到一起,统一压缩成一个block

(4)SequeceFile核心API:

读/写操作。即:Reader 和 Writer

3. SequenceFile代码实例

MapReduce学习(四):Hadoop两种存储方式SequenceFile和MapFile

4. MapFile简介

(1)MapFile简介:

MapFile是排序后的SequenceFile,通过观察其目录结构可以看到MapFile由两部分组成,分别是data和index。

其中,index作为文件的数据索引,主要记录了每个Record的key值,以及该Record在文件中的偏移位置。

(2)MapFile索引机制:

在MapFile被访问的时候,索引文件会被加载到内存,通过索引映射关系可迅速定位到指定Record所在文件位置,因此,相对SequenceFile而言,MapFile的检索效率是高效的,缺点是会消耗一部分内存来存储index数据。

(3)MapFile索引机制注意事项:

MapFile并不会把所有Record都记录到index中去,默认情况下每隔128条记录存储一个索引映射。当然,记录间隔可人为修改,通过MapFIle.Writer的setIndexInterval()方法,或修改io.map.index.interval属性;

(4)MapFile的核心API

读/写 Reader 和 Writer

补充:与SequenceFile不同的是,MapFile的KeyClass一定要实现WritableComparable接口,即Key值是可比较的

5. MapFile代码实例:

MapReduce学习(四):Hadoop两种存储方式SequenceFile和MapFile


MapReduce学习(四):Hadoop两种存储方式SequenceFile和MapFile

相关推荐