Hadoop的I/O操作
数据完整性
监测数据是否损坏常用:计算校验和(不能修复数据)
HDFS的数据完整性:
- HDFS对写入的所有数据计算校验和,并在读取数据时验证校验和。
- 针对每个由io.bytes.per.checksum(默认512)指定的字节的数据计算校验和。
- datanode负责收到数据后存储数据及验证校验和。
- 客户端从datanode读取数据时,验证校验和,每个datanode持久保存有一个用于验证的校验和日志。
- 每个datanode在后台线程中运行一个DataBlockScanner,定期验证该datanode上的所有数据块
- 在使用open()方法读取文件前,可以设置为禁用校验和验证。
压缩
文件压缩的两大好处:减少存储文件所需的磁盘空间;加速数据在网络和磁盘上的传输。
map输出的中间结果以及最终结果均可压缩,通过作业配置过程中设置属性。
注意压缩格式是否支持切分(在压缩数据流的任意位置读取数据)。
序列化
- 序列化:将结构化对象转化为字节流以便在网络上 传输或写到磁盘永久存储的过程
- 反序列化:将字节流转化为结构化对象
- 常用于 :进程间通信和永久存储
- Hadoop节点间通信使用RPC,使用自己的序列化格式Writable,紧凑,速度快,但不太容易用Java以外的语言进行扩展或使用。
- 主要4个接口,分别是Comparator(字节比较器), Comparable(对象比较,在MapReduce中对key进行比较), Writable(序列化), Configurable(参数配置)。