数据正确性检测的技术,通常使用checksum,在数据进行传输前,计算一个checksum值,传输到目标地之后,再根据新的文件计算checksum值,如果不匹配,则说明数据损坏或被改变。只能校验,不提供修复方法。
建议使用ECC内存,提高校验正确率,但这又和hadoop的设计初衷违背?
常见的错误侦测码是CRC-32,HADOOP的ChecksumFileSystem 使用这个编码。
codec是对压缩解压的实现,在hadoop里面,代表着实现了CompressionCodec 接口。
例如GzipCodec封装了gzip算法的实现。
CompressionCodecFactory提供了根据文件名的扩展获取它的Codec的方法。
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory.getCodec(inputPath);
对于64位平台的LInux,hadoop已经自带预编译好的本地压缩库,建议使用本地压缩库,提高压缩与解压的效率。
关于处理压缩文件的时候需要注意的事情,每一个codec会判断文件是否具有可分隔性,如果不可以分隔,就只能丢给一个map task去处理。这是需要注意的。
gzip,snappy都是不支持分片的。bz2和lzo(index)过的可以支持分片,可以用于输入和输出。
不支持分片速度快的lzo,lzo4snappy可以用于中间结果的压缩。配置下面的两个项目:
mapreduce.map.output.compress
mapreduce.map.output.compress.codec