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) 编辑 收藏 举报