我爱编程

Hadoop-i/o操作

2018-05-23  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读