`

第七章 I/O操作

 
阅读更多

 

 

Hadoop中的I/O与传统I/O的区别:

1、传统I/O数据是集中存储的,在一台主机上,Hadoop I/O数据分布在多台主机上。

2、传统I/O数据量比较小,大多GB级,Hadoop I/O数据量经常PB级的

 

7.1 I/O操作的数据检查

通过校验和方式检查数据完整性,检验和不恩那个恢复数据,只能检测数据错误。

Hadoop采用CRC-32(检验和为32位)的方式检查数据完整性。

本地文件文件I/O的检查

当Hadoop创建一个文件,同时也会创建一个“文件名.src”的隐藏文件用来保存校验和。例如创建A文件同时也会创建一个A.src的文件用来保存校验和信息。每512byte Hadoop会生成一个32为的校验和(4byte)。这个值可以在

src/core/core-default.xml

 文件中进行修改每个校验和所针对的文件大小

<property>
  <name>io.bytes.per.checksum</name>
  <value>512</value>
  <description>The number of bytes per checksum.  Must not be larger than
  io.file.buffer.size.</description>
</property>

 校验和操作类为

org.apache.hadoop.fs.ChecksumFileSystem

 继承结构如下,是FileSystem的子类



如果ChecksumFileSystem检测到错误会把源文件、校验和文件移到次级目录bad files中。

本地文件的数据完整性有客户端负责,Hadoop在存储和读取文件时进行校验和处理。

 

HDFS的I/O数据检查

HDFS会在三种情况下检查校验和

1)DataNode接受数据后存储数据前

DataNode一般在两种情况下接收数据:

用户从客户端上传数据
DataNode从其它DataNode上接收数据
2)客户端读取DataNode上的数据时
当客户端读取DataNode数据时,使用

org.apache.hadoop.hdfs.DFSClient

 中的

/* FSInputChecker interface */
    
    /* same interface as inputStream java.io.InputStream#read()
     * used by DFSInputStream#read()
     * This violates one rule when there is a checksum error:
     * "Read should not modify user buffer before successful read"
     * because it first reads the data to user buffer and then checks
     * the checksum.
     */
    @Override
    public synchronized int read(byte[] buf, int off, int len) 
                                 throws IOException {
      
      //for the first read, skip the extra bytes at the front.
      if (lastChunkLen < 0 && startOffset > firstChunkOffset && len > 0) {
        // Skip these bytes. But don't call this.skip()!
        int toSkip = (int)(startOffset - firstChunkOffset);
        if ( skipBuf == null ) {
          skipBuf = new byte[bytesPerChecksum];
        }
        if ( super.read(skipBuf, 0, toSkip) != toSkip ) {
          // should never happen
          throw new IOException("Could not skip required number of bytes");
        }
      }

 函数,现将数据读入到客户端的数据缓冲区中,然后在检查校验和。

3)DataNode后台守护进程的定期检测
DataNode的后台进程会定期的检查DataNode上的所有数据块

 

数据恢复策略

 P123

 

7.2 数据的压缩

Hadoop提供的压缩格式



 如果需要处理Gzip压缩后的5GB数据,Hadoop本应按64MB为一个数据块进行分割为80份,但Hadoop不会分割压缩后的数据。但如果是bzip2数据,因为它支持分割,所以压缩数据可以分割存储。

在MapReduce程序中使用压缩,设置Map处理后的压缩数据程序如下



 

7.3 数据的I/O中序列化操作

 序列化:将对象转化为字节流的方式

反序列化:将字节流转换为对象的方式

Writable是Hadoop序列化的核心接口

 

public interface Writable {
  /** 
   * Serialize the fields of this object to <code>out</code>.
   * 
   * @param out <code>DataOuput</code> to serialize this object into.
   * @throws IOException
   */
  void write(DataOutput out) throws IOException;

  /** 
   * Deserialize the fields of this object from <code>in</code>.  
   * 
   * <p>For efficiency, implementations should attempt to re-use storage in the 
   * existing object where possible.</p>
   * 
   * @param in <code>DataInput</code> to deseriablize this object from.
   * @throws IOException
   */
  void readFields(DataInput in) throws IOException;
}

Hadoop的比较器

WritableComparator是WritableComparable的比较器,它是RawComparator针对WritableComparable的通用实现,RawComparator继承自Comparator



 
RawComparator中实现了对未反序列化数据的比较,这样可以不必创建对象,直接针对数据的字节流进行比较。

Writable类中的数据类型

 

 

 

7.4 对对MapReduce的文件类

 P139 为完成

 

 

 

 

 

 

 

 

 

  • 大小: 29.1 KB
  • 大小: 496.4 KB
  • 大小: 295.7 KB
  • 大小: 192.8 KB
  • 大小: 175.9 KB
分享到:
评论

相关推荐

    操作系统精髓与设计原理答案

    1.8、 列出并简要地定义I/O操作的三种技术。 答:可编程I/O:当处理器正在执行程序并遇到与I/O相关的指令时,它给相应的I/O模块发布命令(用以执行这个指令);在进一步的动作之前,处理器处于繁忙的等待中,直到该...

    UNIX网络编程第1卷(1-19章)

    第七章 套接口选项 第八章 基本UDP套接口编程 第九章 基本名字与地址转换 第十章 IPv4和Ipv6的互操作性 第十一章 高级名字与地址转换 第十二章 守护进程和inetd超级服务器 第十三章 高级I/O函数 第十四章 Unix域协议...

    UNIX网络编程 第2卷 进程间通信.pdf(带书签)

    第7章 套接口选项 第8章 基本UDP套接口编程 第9章 基本SCTP套接口编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第3部分 高级套接口编程? 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd超级...

    UNIX网络编程 第2卷 进程间通信 带完整书签

    第7章 套接口选项 第8章 基本UDP套接口编程 第9章 基本SCTP套接口编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第3部分 高级套接口编程? 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd...

    UNIX网络编程 卷1:套接字联网API

    第7章 套接字选项 第8章 基本UDP套接字编程 第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第三部分 高级套接字编程 第12章 IPv4与IPv6的互操作性 第13章 守护...

    UNIX环境高级编程(第十二章)

    第12章 高级I/O 273 12.1 引言 273 12.2 非阻塞I/O 273 12.3 记录锁 275 12.3.1 历史 276 12.3.2 fcntl记录锁 276 12.3.3 锁的隐含继承和释放 280 12.3.4 4.3+BSD的实现 281 12.3.5 建议性锁和强制性锁 284 12.4 流 ...

    PHP4 的编程与实例.zip

    第7章 计算应用 第8章 图像应用 第三部分 实战篇 第13章 门庭若市――网页计数器设计 第14章 不吐不快――留言板设计 第15章 它是谁――网站信息查询设计 第四部分 补充篇 第21章 OOP在PHP中的应用 第22章 SQL与...

    UNIX网络编程卷2进程间通信(第2版)

    第7章 套接口选项 第8章 基本UDP套接口编程 第9章 基本SCTP套接口编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第3部分 高级套接口编程? 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd超级...

    UNIX网络编程卷1:套接字联网API(第3版)part1 共2部分

    第7章 套接字选项 第8章 基本UDP套接字编程 第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第三部分 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd超级服务器 第...

    OMRON CJ1系列PLC操作手册

    第7 章 介绍PC 设置中的初始硬件和软件设定。 第8 章 介绍对基本 I/O 单元、特殊 I/O 单元和CPU 总线单元的I/O 分配,以及与CPU 总线单元的 数据交换。 第9 章 介绍 I/O 存储器区和参数区的结构和功能。 第10 章 ...

    ABB工业机器人编程-第四章.pptx

    di8\do8\ao2 DSQC 652 分布式I/O模块 di16\do16 DSQC 653 分布式I/O模块 di8\do8带继电器 DSQC 355A 分布式I/O模块 ai4\ao4 DSQC 377A 输送链跟踪单元 ABB工业机器人编程-第四章全文共158页,当前为第7页。...

    Linux Shell编程从初学到精通 第2版

    第7章 退出、测试、判断及操作符 157 第8章 循环与结构化命令 187 第9章 变量的高级用法 217 第10章 I/O重定向 243 第11章 Linux/UNIX Shell类型与区别 273 第12章 子Shell与进程处理 288 第13章 函数 314 第...

    嵌入式系统-硬件与软件架构(正版)

     第7章 板级总线  第三部分 嵌入式软件介绍  第8章 设备驱动程序  第9章 嵌入式操作系统   第10章 中间件和应用软件 第四部分 系统集成:设计与开发  第11章 定义系统——创建体系结构和编写设计文档   第...

    Hadoop实战(第2版)

    第1章 初识Hadoop 1 第2章 关于MapReduce 19 第3章 Hadoop分布式文件系统 49 第4章 Hadoop的I/O操作 89 第5章 MapReduce应用开发 157 第6章 MapReduce的工作机制 205 第7章 MapReduce的类型与格式 241 第8章 ...

    《深入解析Windows操作系统》中文版 第四版 part1

    第7章 内存管理 7.1 内存管理器简介 7.2 内存管理器提供的服务 7.3 系统内存池 7.4 虚拟地址空间的布局结构 7.5 地址转译 7.6 页面错误处理 7.7 虚拟地址描述符 7.8 内存区对象 7.9 工作集 7.10 逻辑预取器 7.11 ...

    深入解析Windows操作系统 中文版 第四版 part 4

    第7章 内存管理 7.1 内存管理器简介 7.2 内存管理器提供的服务 7.3 系统内存池 7.4 虚拟地址空间的布局结构 7.5 地址转译 7.6 页面错误处理 7.7 虚拟地址描述符 7.8 内存区对象 7.9 工作集 7.10 逻辑预取器 7.11 ...

    C++入门经典(第9版) ([美]Walter Savitch著) 中文pdf完整扫描版[302MB]

    第7章 数组 第8章 字符串和向量 第9章 指针和动态数组 第10章 定义类 第11章 类中的友元函数、重载操作符和数组 第12章 独立编译和命名空间 第13章 指针和链表 第14章 递归 第15章 继承 第16章 异常处理 第17章 模板...

    Delphi7组件应用实例

    第7章 BDE组件页 7.1 TTable组件 7.2 TQuery组件 7.3 TDataBase组件 7.4 TBatchMove组件 7.5 TUpdateSQL组件 7.6 综合应用实例 第8章 ADO组件页 8.1 TADOConnection组件 8.2 TADOCommand组件 8.3 ...

    清华版labview教程

    第七章 信号分析与处理 7.1 概述 7.2 信号的产生 7.3 标准频率 7.4 数字信号处理 7.4.1 FFT变换 7.4.2 窗函数 7.4.3 频谱分析 7.4.4 数字滤波 7.4.5 曲线拟合 第八...

Global site tag (gtag.js) - Google Analytics