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操作

    一.数据完整性 数据检查:一般使用CRC -32方式检查数据完整性 1.对本地文件I/o的数据完整性检查 hdfs...

  • IO多路复用的作用

    1、阻塞 I/O 只能阻塞一个 I/O 操作,而 I/O 复用模型能够阻塞多个 I/O 操作,所以才叫做多路复用 ...

  • IO多路复用的作用,并发

    1、阻塞 I/O 只能阻塞一个 I/O 操作,而 I/O 复用模型能够阻塞多个 I/O 操作,所以才叫做多路复用 ...

  • Java I/O的工作机制

    基于字节的I/O操作接口 基于字符的I/O操作接口 字节和字符转换接口 磁盘I/O的工作机制 ...

  • 第二章 深入分析Java I/O的工作机制

    Java I/O的基本架构 基于字节操作I/O,InputStream 和 OutputStream 基于字符操作...

  • 零拷贝原理详解

    引言 传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内...

  • Java零拷贝一步曲——Linux 中的零拷贝技术

    传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址...

  • Heap queue (or heapq) in Python

    Heap 支持操作:O(log N) Add / O(log N) Remove / O(1) Min or Ma...

  • 9.阻塞与非阻塞

    阻塞 I/O 是指,在用户进程发起 I/O 操作后,需要等待操作完成才能继续运行。 阻塞I/O的编程模型非常易...

  • Dict

    时间复杂度: 操作平均情况最坏情况 复制O(n)O(n) 取元素O(1)O(n) 改元素O(1)O(n) 删元素O...

网友评论

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

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