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 为完成
相关推荐
1.8、 列出并简要地定义I/O操作的三种技术。 答:可编程I/O:当处理器正在执行程序并遇到与I/O相关的指令时,它给相应的I/O模块发布命令(用以执行这个指令);在进一步的动作之前,处理器处于繁忙的等待中,直到该...
《微机原理第七章题库完整》文档主要涵盖了8086/8088微处理器在I/O端口编址、寻址以及与之相关的操作。以下是对这些知识点的详细解释: 1. **I/O编址方式**:8086/8088CPU采用独立编址方式,即I/O端口的地址空间与...
第7章 输入/输出系统是计算机操作系统的重要组成部分,主要负责计算机与外部设备间的数据传输。这一章的内容涵盖了I/O系统的功能、模型、接口以及不同层次的软件结构。I/O系统的主要任务是满足用户对I/O设备的操作...
这些方法使得CPU可以在不直接参与I/O操作时处理其他任务,提高系统效率。 3. **I/O缓冲**:为了减少CPU与慢速I/O设备间的等待时间,引入了缓冲技术。缓冲区可以存储待处理的数据,使得CPU可以继续执行其他任务,而...
第7章设备管理的内容,全面展开于《计算机操作系统课件:第7章设备管理01.ppt》中,为学习者提供了关于设备管理的系统性理论和实践知识。 设备管理的核心目标在于实现硬件资源的合理分配和控制,这不仅涉及到硬件...
本资料是针对考研学生的计算机组成原理复习指南,特别是第9章——输入/输出(Input/Output, I/O)系统。I/O系统在计算机系统中起着至关重要的作用,因为它负责计算机与外部设备之间的数据传输,包括键盘、鼠标、...
【第七章 基本输入输出方式】 输入输出(I/O)系统是计算机系统中连接硬件设备与主处理单元(CPU)的关键组成部分,用于数据的传输和设备的控制。本章将详细介绍I/O系统的发展历程、组成、设备的联系方式、信息传送...
本资源为《操作系统第五版 精髓与设计原理》第五版1-12章课后题中文答案,涵盖了操作系统的基本概念和原理,包括计算机的四个主要组成部分、处理器寄存器、机器指令、中断、内存层次、高速缓冲存储器、I/O 操作、...
设备控制器有地址译码、外部通信、指令执行等功能,而I/O接口寄存器和缓冲区则用于存储命令、状态和数据,通过中断机制通知CPU完成I/O操作。 4. **I/O管理任务与目标**:I/O管理的任务包括设备控制、分配与回收、...
- 中断控制:CPU启动I/O操作后,可以执行其他任务,I/O设备完成后通过中断通知CPU。 - DMA(直接存储器访问):数据块传输,减少中断次数,提高CPU利用率。 - 通道控制:使用I/O通道进行独立的I/O操作,进一步...
在深入探讨Java语言程序设计教程中第七章的内容之前,首先需要了解Java中的I/O操作是程序与外部世界交换数据的主要方式,无论是文件数据、网络数据还是用户输入输出。I/O的全称是Input/Output,指的是计算机系统与...
第7章 套接口选项 第8章 基本UDP套接口编程 第9章 基本SCTP套接口编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第3部分 高级套接口编程? 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd...
第7章 套接字选项 第8章 基本UDP套接字编程 第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第三部分 高级套接字编程 第12章 IPv4与IPv6的互操作性 第13章 守护...
【微机原理与接口:第七章 输入输出接口】 在微机系统中,输入输出(I/O)接口扮演着至关重要的角色。它连接了处理器与各种外部设备,这些设备包括硬盘、键盘、显示器、打印机等,它们在工作原理、驱动方式、信息...
在微机原理中,第七章主要讲解了输入和输出(I/O)的相关概念和技术。I/O接口是微机系统与外部设备之间的重要桥梁,因为不同的外部设备在工作原理、驱动方式、信息格式和速度上存在巨大差异,它们无法直接与CPU进行...
I/O独立编址方式时机器为I/O设备专门安排一套完全不同于主存地址格式的地址编码,此时I/O地址与主存地址是两个独立的空间,CPU需要通过专门的I/O指令来访问I/O地址空间。 2. 简要说明CPU与I/O之间传递信息可采用哪...
计算机组成原理第五章主要探讨了CPU与I/O设备之间的交互方式、I/O设备的控制方式、I/O接口的功能和分类,以及中断系统的相关概念。以下是这些知识点的详细说明: 1. CPU与I/O设备间的信息传递方式: - **直接控制*...
操作系统中的第五章主要讨论了设备管理,这包括各种类型的I/O通道、解决通道瓶颈的方法、I/O控制方式的发展驱动力以及设备独立性的概念和实现。以下是这些知识点的详细解释: 1. **字节多路通道**:这是一种通道...