首页 > 代码库 > HDFS简介

HDFS简介

文章包括以下内容:

1. Hadoop2简介与Hadoop1区别

2. Hadoop2主要改进

3. HDFS概述

4. HDFS主要特性

5. HDFS不适合的场景

6. HDFS体系结构

7. HDFS构成

8. 数据块

9. 数据块的好处

10. HDFS读写流程

 

---------------------------------------------------------------------------------

1. Hadoop2简介与Hadoop1区别

技术分享技术分享

2. Hadoop2主要改进

增加了4部分内容:YARN、NameNode HA、HDFS federation、Hadoop RPC序列化扩展性

3. HDFS概述

HDFS是一个分布式文件系统,具有高容错的特点。它可以部署在廉价的通用硬件上,提供高吞吐率的数据访问,适合那些需要处理海量数据集的应用程序。

4. HDFS主要特性

支持超大文件;

检测和快速应对硬件故障;

流式数据访问;

简化一致性模型。

5. HDFS不适合的场景

低延迟数据访问;

大量的小文件;

多用户写入文件,修改文件。

6. HDFS体系结构

 技术分享

7. HDFS构成

NameNode上保存着HDFS的名字空间,DataNode将HDFS数据以文件的形式存储在本地的文件系统中,它并不知道有关HDFS文件的信息,它把每个HDFS数据块存储在本地文件系统的一个单独的文件中。

8. 数据块

HDFS也有块的概念,hadoop2中HDFS块默认大小128MB,hadoop1中HDFS块默认大小64MB,以Linux普通文件的形式保存在数据节点的文件系统中。数据块是HDFS的文件存储处理的单元。

9. 数据块的好处

HDFS可以保存比存储节点单一磁盘大的文件;

简化了存储子系统,简化了存储管理,也消除了分布式管理文件元数据的复杂性;

方便容错,有利于数据复制。

10. HDFS读写流程

读流程

技术分享

首先,HDFS提供的客户端(HDFS client)向远程的NameNode发起RPC请求,然后NameNode会视情况访问文件部分或全部块的位置(block location)。对于每个block,NameNode都会返回有该block拷贝的DataNode地址,然后返回生成FSData InputStream,HDFS client再根据这个流进行数据的一个流的读操作。客户端会选取离其最近的DataNode来读取block,如果客户端本身就是DataNode,将从本地直接获取数据,读取完当前block数据后,关闭当前DataNode连接,并为读取下一个block寻找最佳的DataNode。当读完列表的block后,其文件读取还没有结束,客户端会继续向NameNode获取下一批的block列表,当读取完一个block,会进行校验,如果读取的DataNode出现错误,会重新访问NameNode,然后从下一个拥有该block拷贝DataNode读取。

写流程

 技术分享

HDFS客户端向远程的NameNode发起RPC请求,NameNode会检查要创建的文件是不是存在,创建者是否有权限操作,成功,会为文件创建一个记录,否则,会让客户端抛出异常。当客户端开始写入文件的时候,文件会被分为多个package,会放入队列,这时候,FSDataOutputStream会向NameNode申请block,分清你要写到哪些block里,申请完以后,会支持一个写的操作。因为HDFS有冗余机制,当然这个冗余机制可以根据具体情况设定,默认是3份。假设集群冗余是3份,它会首先写入第一个DataNode,然后再写第二个DataNode,再写入第三个DataNode。如果写入成功,则按原路径返回给客户端。如果中间某个DataNode出现了问题,这时候就会有一个最小不等数,如果我们最小不等数设为1,那么我写3个节点的数据只写成功2个,那返回以后还是会写入HDFS,不过在后面会进行一个副本恢复,这就是一个写的流程。

创建子路径流程

技术分享

向HDFS增加新的路径,只会和NameNode交互,在NameNode上追加新开辟的记录,这就是HDFS创建路径的流程,它不会和DataNode交互。

删除数据流程

技术分享

删除数据时,客户端会和NameNode交互,它会有RPC告诉哪些数据要删除,并在NameNode上做标记,等到DataNode对NameNode返回信号的时候,NameNode会指定DataNode删除相应的block。

 

HDFS简介