Hadoop权威指南 第5章 Hadoop I/O

数据完整性

Hadoop ChecksumFileSystem 使用 CRC-3计算校验和,HDFS用于校验和计算的则是一个更有效的变体CRC-32C。
datanode在接收到客户端或者复制其他datanode的数据时校验数据。
由于HDFS存储着每个数据块的复本,一次可以通过数据复本修复损坏的数据块,进而得到一个新的、完好无损的复本。客户端在读取数据块时,如果检测到错误,首先回想namenode报告已经损坏的数据块以及读取操作的datanode节点信息,namenode将这个数据块复本标记为已损坏,之后安排这个数据块的一个复本复制到另一个datanode。


压缩

文件压缩有两个好处:

  1. 减少存储文件所需要的磁盘空间。
  2. 加速数据在网络和磁盘上的传输。
    各种压缩格式对比,下表列出了与Hadoop结合使用的常见的压缩方法。
    Hadoop权威指南 第5章 Hadoop I/O

MapReduce处理数据时,理解这些压缩格式是否支持切分是非常重要的。如果一个文件的压缩格式是不支持切分的,那么每个数据块就不能单独作为一个输入分片是无法实现工作的。这种情况下,MapReduce会采用正确的做法,他不会尝试切分不可切分的压缩文件。
Hadoop应用处理的数据集非常大,因此需要借助于压缩。使用哪种压缩个还是与待处理的文件的大小、格式和所使用的工具相关。下面是一些建议,大致是按照效率从高到低排列的:
3. 使用容器文件格式,这些文件格式同时支持压缩和切分
4. 使用支持切分的压缩格式
5. 在应用中将文件切分成块
6. 存储未经压缩的文件


序列化
序列化是指将结构化的对象转化为字节流以便在网络上传输或写到磁盘进行永久的存储。
反序列化是将字节流会转回结构化对象的逆过程。主要应用在进程间通信和永久存储。
Hadoop使用自己的序列化格式Writable。Writable类对所有Java基本类型提供封装
Hadoop权威指南 第5章 Hadoop I/O


基于文件的数据结构

SequenceFile:为二进制键值对提供了一个持久数据结构,HDFS和MapReduce是针对大文件优化的,所以通过SequenceFile类型将小文件包装起来,可以获得更高效的存储和处理。
MapFile:是已经排序过的SequenceFile,它有索引,所以可以按键查询。
Avro:某些方面类似于顺序文件,面向大规模数据处理而设计,紧凑且可分。
RCFile:Record Columnar File,面向列的文件格式