Hadoop-i/o操作

作者: 机器不能学习 | 来源:发表于2018-05-23 22:02 被阅读0次

    一.数据完整性

    数据检查:一般使用CRC -32方式检查数据完整性

    1.对本地文件I/o的数据完整性检查

    hdfs写入的时候计算出校验和,然后每次读的时候再计算校验和。要注意的一点是,hdfs每固定长度就会计算一次校验和,这个值由io.bytes.per.checksum指定,默认是512字节。因为CRC32是32位即4个字节,这样校验和占用的空间就会少于原数据的1%。同时你也可以关闭校验。

    2.对HDFS i/o的数据完整性检查

    1)datanode在存储收到的数据前会校验数据的校验和,比如收到客户端的数据或者其他副本传过来的数据。hdfs数据流中客户端写入数据到hdfs时的数据流,在管道的最后一个datanode会去检查这个校验和,如果发现错误,就会抛出ChecksumException到客户端。(这里的客户端可能是一个DataNode也可能只是一个客户端而已并不是Hadoop节点)

    2)客户端从datanode读数据的时候一样要检查校验和,而且每个datanode还保存了检查校验和的日志,客户端的每一次校验都会记录到日志中。

    3)datanode还跑着一个后台进程(DataBlockScanner)来定期校验存在在它上面的block,因为除了读写过程中会产生数据错误以外,硬件本身也会产生数据错误,比如说位衰减(bit rot)。

    3.文件修护

    如果发现某个数据块失效,读操作涉及的用户,DataNode,NameNode都会尝试恢复,而且恢复称该后会设置标签标记,防止其他人重复修护。


    二.文件分类

    SequenceFile

    https://www.cnblogs.com/yangsy0915/p/5559678.html

    Record:存储SequenceFile通用的KV数据格式,Key和Value都是二进制变长的数据。Record表示Key和Value的byte的总和。

    Sync:主要是用来扫描和恢复数据的,以至于读取数据的Reader不会迷失。

    Header:存储了如下信息:文件标识符SEQ,key和value的格式说明,以及压缩的相关信息,metadata等信息。

    metadata:包含文件头所需要的数据:文件标识、Sync标识、数据格式说明(含压缩)、文件元数据(时间、owner、权限等)、检验信息等


    三.文件压缩

    使用压缩的优点如下:

    1. 节省数据占用的磁盘空间;                                                                                                                      2. 加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度。

    Hadoop 对于压缩格式的是自动识别。如果我们压缩的文件有相应压缩格式的扩展名(比如 lzo,gz,bzip2 等)。Hadoop会根据压缩格式的扩展名自动选择相对应的解码器来解压数据,此过程完全是 Hadoop 自动处理,我们只需要确保输入的压缩文件有扩展名。

    使用方式

    MapReduce 可以在三个阶段中使用压缩。

    1. 输入压缩文件。如果输入的文件是压缩过的,那么在被 MapReduce 读取时,它们会被自动解压。

    2.MapReduce 作业中,对 Map 输出的中间结果集压缩。实现方式如下:

    1)可以在 core-site.xml 文件中配置,代码如下

    图 2. core-site.xml 代码示例

    2)使用Java代码指定

    conf.setCompressMapOut(true);

    conf.setMapOutputCompressorClass(GzipCode.class);

    最后一行代码指定 Map 输出结果的编码器。

    3.MapReduce 作业中,对 Reduce 输出的最终结果集压。实现方式如下:

    1)可以在 core-site.xml 文件中配置,代码如下

    图 3. core-site.xml 代码示例

    2)使用 Java 代码指定

    conf.setBoolean(“mapred.output.compress”,true);

    conf.setClass(“mapred.output.compression.codec”,GzipCode.class,CompressionCodec.class);

    最后一行同样指定 Reduce 输出结果的编码器。

    分割

    同样压缩分割和输入分割也很重要。分割储存也会影响到执行效率。


    四.序列化

    序列化的用途

        1)作为一种持久化格式

        2)作为一种通信的数据格式

        3)作为一种数据拷贝、克隆机制

    序列化的特征:

        1)紧凑:Hadoop中最稀缺的资源是宽带,所以紧凑的序列化机制可以充分的利用宽带。

        2)快速:通信时大量使用序列化机制,因此,需要减少序列化和反序列化的开销。

        3)可扩展:随着通信协议的升级而可升级。

        4)互操作:支持不同开发语言的通信。

        Writable接口提供了两个方法,Write和readFiles(序列化和反序列化)

    Hadoop序列化类

        实现了WritableComparable接口的类

        基础类:BooleanWritable,ByteWritable,IntWritable,VIntWritable,

    FIntWritable,LongWritbale,VLongWritavle,DoubleWritable

        高级类:NullWritable,Text,BytesWritable,MDSHash,ObjectWritable,

    GenericWritable

        仅实现了Writable接口的类:

        数组:AbstractWritable,TwoDArrayWritable

        映射:AbstractMapWritable,MapWritable,SortedMapWritable

    相关文章

      网友评论

        本文标题:Hadoop-i/o操作

        本文链接:https://www.haomeiwen.com/subject/kvydjftx.html