Hadoop的I/O操作

一、数据完整性
HDFS的数据完整性
    1、hadoop自带一套原子操作用于IO操作;
    2、HDFS数据完整性:会对写入的所有数据计算校验和,并在读取数据时验证校验和,针对每个io.bytes.per.checksum指定字节的数据计算校验和;
    3、由于HDFS存储着每个数据块的复本,因为它可以通过数据复本来修复损坏的数据块;

LocalFileSystem:执行客户端的校验和验证
    1、新建.filename.crc的隐藏文件,块大小于io.bytes.per.checksum控制,默认512字节;

CheckSumFileSystem类:继承自FileSystem,向其他文件系统加入校验和
    1、FileSystem rawFS = ....;FileSystem checksummedFS = new CheckSumFileSystem(rawFS);

二、压缩
    1、最快的压缩方法:gzip -1 filename (-1为最快压缩,但空间减少最少,-9为节省最大空间压缩)
    2、CodeC压缩/解压缩算法类:org.apache.hadoop.io.compress.DefaultCodeC/GzipCodeC/BZip2CodeC/LzopCodeC/Lz4CodeC/SnappCodeC
    3、CompressionCodeC压缩/解压缩:写入输入流压缩方法-->createOutPutStream在底层数据流中写入CompressionOUtPutStream对象;
        相反则是createInputStream获取CompressionInputStream对象;
    4、CompressionCodeFactory推断CompressionCodeC:例如文件名以.gz结尾使用GzipCodeC
    5、InputStream in = codec.createInputStream(fs.open(new path(args[0])));
    6、OutputStream out = fs.create(new Path(outputuri))
    7、CodeCPool:支持反复压缩和解压缩,以分摊创建这些对象的开销;
    8、Map端压缩: mapred.map.output.compression.codeC 设为org.apache.hadopio.cpmpress.DefaultCodeC

三、序列化
    定义:是指将化对象转化节流以便在网络上传输或写到磁盘进行永久存储的过程;
    常用之处:1、进行间通信;2、永久存储
    RPC:(远程过程调用)系统间进行间的通信方式;RPC协议将消息转化为二进行制后发送到远程节点;
    1、Writable:Hadoop自己的序列化格式
    2、WritableComparable:对MapReduce来说,类型比较非常重要,因为中间有个基于键的排序阶段;
    3、Writable对java基本类型提供封装;

posted @ 2015-07-21 11:37  张平a  阅读(313)  评论(0编辑  收藏  举报