保证数据完整性
校验技术。
客户端读取数据节点上的数据时,会验证校验和,将其与数据节点上存储的校验和进行对比。HDFS通过复制完整的副本来产生一个新的,无错的副本来“治愈”哪些出错的数据块。工作方式:如果客户端读取数据块时检测到错误,抛出ChecksumException前报告该坏块以及它试图从名称节点中读取的数据节点。名称节点将这个块标记为损坏的,不会直接复制给客户端或复制该副本到另一个数据节点。它会从其他副本复制一个新的副本。
ChecksumFileSystem类实现校验工作
压缩技术
压缩技术好处,减少数据存储空间,提供磁盘和网络的传输速度。
在考虑如何压缩那些将由MapReduce处理的数据时,考虑压缩格式是否支持分割是很重要的。
编码/解码器类型:
DEFLATE org.apache.hadoop.io.compress.DefaultCodec 不可分割
•gzip org.apache.hadoop.io.compress.GzipCodec 不可分割
•bzip2 org.apache.hadoop.io.compress.Bzip2Codec 可分割
•LZO com.hadoop.compression.lzo.LzopCodec 可分割
•CompressionCodec 对流进行进行压缩与解压缩
•CompressionCodecFactory 方法来推断CompressionCodec
MR中使用压缩
1、读取压缩文件
如果文件是压缩过的,那么在被MapReduce读取时,它们会被解压,根据文件的扩展名来选择应该使用哪一种压缩解码器。如果压缩的文件没有扩展名,则需 要在执行mapreduce任务的时候指定输入格式.
2、MapReduce的作业输出压缩文件
conf.setBoolean(“mapred.output.compress’,true)
Conf.setClass(“mapred.output.compression.codec”,GizpCodec.class,CompressionCodec.class);
3、Map作业输出中间结果的压缩
因为Map作业的中间结果会输出到本地,并在网络上传递。所以压缩能获得更好性能,因为传播的数据减少了。
conf.setBoolean(“mapred.compress.map.output”, true);
conf.setClass(“mapred.map.output.compression.codec”,GzipCodec.class, CompressionCodec.class);