`

第七章 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模块发布命令(用以执行这个指令);在进一步的动作之前,处理器处于繁忙的等待中,直到该...

    微机原理第七章题库完整.doc

    《微机原理第七章题库完整》文档主要涵盖了8086/8088微处理器在I/O端口编址、寻址以及与之相关的操作。以下是对这些知识点的详细解释: 1. **I/O编址方式**:8086/8088CPU采用独立编址方式,即I/O端口的地址空间与...

    第7章 输入输出系统.pptx

    第7章 输入/输出系统是计算机操作系统的重要组成部分,主要负责计算机与外部设备间的数据传输。这一章的内容涵盖了I/O系统的功能、模型、接口以及不同层次的软件结构。I/O系统的主要任务是满足用户对I/O设备的操作...

    操作系统课件:第5章 设备管理.ppt

    这些方法使得CPU可以在不直接参与I/O操作时处理其他任务,提高系统效率。 3. **I/O缓冲**:为了减少CPU与慢速I/O设备间的等待时间,引入了缓冲技术。缓冲区可以存储待处理的数据,使得CPU可以继续执行其他任务,而...

    计算机操作系统课件:第7章设备管理01.ppt

    第7章设备管理的内容,全面展开于《计算机操作系统课件:第7章设备管理01.ppt》中,为学习者提供了关于设备管理的系统性理论和实践知识。 设备管理的核心目标在于实现硬件资源的合理分配和控制,这不仅涉及到硬件...

    计算机组成原理考研指导(word版)第9章

    本资料是针对考研学生的计算机组成原理复习指南,特别是第9章——输入/输出(Input/Output, I/O)系统。I/O系统在计算机系统中起着至关重要的作用,因为它负责计算机与外部设备之间的数据传输,包括键盘、鼠标、...

    第七章基本输入输出方式.doc

    【第七章 基本输入输出方式】 输入输出(I/O)系统是计算机系统中连接硬件设备与主处理单元(CPU)的关键组成部分,用于数据的传输和设备的控制。本章将详细介绍I/O系统的发展历程、组成、设备的联系方式、信息传送...

    操作系统第五版1—12章课后题中文答案

    本资源为《操作系统第五版 精髓与设计原理》第五版1-12章课后题中文答案,涵盖了操作系统的基本概念和原理,包括计算机的四个主要组成部分、处理器寄存器、机器指令、中断、内存层次、高速缓冲存储器、I/O 操作、...

    《操作系统设计与实现》第四章__IO设备管理.pptx

    设备控制器有地址译码、外部通信、指令执行等功能,而I/O接口寄存器和缓冲区则用于存储命令、状态和数据,通过中断机制通知CPU完成I/O操作。 4. **I/O管理任务与目标**:I/O管理的任务包括设备控制、分配与回收、...

    《操作系统原理及应用(Linux)》-第6章 设备管理.pptx

    - 中断控制:CPU启动I/O操作后,可以执行其他任务,I/O设备完成后通过中断通知CPU。 - DMA(直接存储器访问):数据块传输,减少中断次数,提高CPU利用率。 - 通道控制:使用I/O通道进行独立的I/O操作,进一步...

    Java语言程序设计教程课件第七章文件和数据流

    在深入探讨Java语言程序设计教程中第七章的内容之前,首先需要了解Java中的I/O操作是程序与外部世界交换数据的主要方式,无论是文件数据、网络数据还是用户输入输出。I/O的全称是Input/Output,指的是计算机系统与...

    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章 守护...

    微机原理与接口:第七章 输入输出接口.pdf

    【微机原理与接口:第七章 输入输出接口】 在微机系统中,输入输出(I/O)接口扮演着至关重要的角色。它连接了处理器与各种外部设备,这些设备包括硬盘、键盘、显示器、打印机等,它们在工作原理、驱动方式、信息...

    微机原理第七章ppt

    在微机原理中,第七章主要讲解了输入和输出(I/O)的相关概念和技术。I/O接口是微机系统与外部设备之间的重要桥梁,因为不同的外部设备在工作原理、驱动方式、信息格式和速度上存在巨大差异,它们无法直接与CPU进行...

    计算机组成原理第五章答案最新版本.ppt

    I/O独立编址方式时机器为I/O设备专门安排一套完全不同于主存地址格式的地址编码,此时I/O地址与主存地址是两个独立的空间,CPU需要通过专门的I/O指令来访问I/O地址空间。 2. 简要说明CPU与I/O之间传递信息可采用哪...

    计算机组成原理第5章作业答案PPT课件.pptx

    计算机组成原理第五章主要探讨了CPU与I/O设备之间的交互方式、I/O设备的控制方式、I/O接口的功能和分类,以及中断系统的相关概念。以下是这些知识点的详细说明: 1. CPU与I/O设备间的信息传递方式: - **直接控制*...

    操作系统课后答案之第五章.pdf

    操作系统中的第五章主要讨论了设备管理,这包括各种类型的I/O通道、解决通道瓶颈的方法、I/O控制方式的发展驱动力以及设备独立性的概念和实现。以下是这些知识点的详细解释: 1. **字节多路通道**:这是一种通道...

Global site tag (gtag.js) - Google Analytics