hadoop I/O

今天,继续看《hadooop权威指南》这本书,了解了一下hadoop I/O和数据完整性的知识,接下来给大家分享一下我的总结。

1,保持数据完整性:常用的检测方法就是CRC (循环冗余校验和)

HDFS以透明方式校验所有写入的数据,针对数据的io.bytes.per.checksum字节创建一个单独的校验和,如果节点检测数据错误,就会报CheckSumException异常;除了在读取数据时进行验证,数据节点也会在后台运行一个进程 DataBlockScanner(数据块检测程序)验证存储在数据节点上的所有块。

我们可以使用FileSystem.setVerifyChecksum(false)来禁用校验和验证,也可以在shell命令中使用-ignoreCrc选项

禁用校验的另一种可能:底层RawLocalFileSystem原生支持校验和,通过设置fs.file.impl的值为org.apache.hadoop.fs.RawLocalFileSystem或者建立它的实例

LocalFileSystem使用ChecksumFileSystem ,它的两个有用方法 getChecksumFile()和reportChecksumFailure()

2,压缩

常见的用于hadoop的压缩格式

特别注意:gzip和zip是通用压缩工具,空间和时间处理上相对平衡,bzip2压缩更有效,但比较慢,lzo使用速度最优算法,但压缩效率低;在分割性上,zip和bzip2可以分割,bzip2提供了块与块的同步标记,支持随机分割,zip支持文件边界处分割。适合mapreduce算法!

3,编码解码器

使用CompressionCodec createOutputStream--CompressionOutputStream  createInputStream--CompressionInputStream

使用CompressionCodecFactory.getCodec(path)--CompressionCodec 通过 removeSuffix移除文件后缀

压缩池CodecPool 来处理大量的解压缩任务  getCompressor(CompressionCodec),returnCompressor(compressor)

在MapReduce中引入压缩 设置:mapred.output.compress  true, mapred.output.compression.codec 某种编码类;

map输出结果的压缩:setCompressionMapOutput(true) setMapOutputCompressorClass(GzipCodec.Class)

时间不早了,先写到这吧。。。与大家共勉!

posted on 2012-11-17 00:50  woyuchengxian  阅读(1095)  评论(0编辑  收藏  举报

导航