阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop分布式文件系统HDFS的工作原理

171次阅读
没有评论

共计 3155 个字符,预计需要花费 8 分钟才能阅读完成。

Hadoop 分布式文件系统 (HDFS) 是一种被设计成适合运行在通用硬件上的分布式文件系统。HDFS 是一个高度容错性的系统,适合部署在廉价 的机器上。它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。要理解 HDFS 的内部工作原理,首先要理解什么是分布式文件系统。

1、分布式文件系统

多台计算机联网协同工作 (有时也称为一个集群) 就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统。

分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储。换句话说,它们是横跨在多台计算机上的存储系统。存储在分布式文件系统上的数据自动分布在不同的节点上。

分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理来自网络和其它地方的超大规模数据提供所需的扩展能力。

2、分离元数据和数据:NameNode 和 DataNode

存储到文件系统中的每个文件都有相关联的元数据。元数据包括了文件名、i 节点 (inode) 数、数据块位置等,而数据则是文件的实际内容。

在传统的文件系统里,因为文件系统不会跨越多台机器,元数据和数据存储在同一台机器上。

为了构建一个分布式文件系统,让客户端在这种系统中使用简单,并且不需要知道其他客户端的活动,那么元数据需要在客户端以外维护。HDFS 的设计理念是拿出一台或多台机器来保存元数据,并让剩下的机器来保存文件的内容。

NameNode 和 DataNode 是 HDFS 的两个主要组件。其中,元数据存储在 NameNode 上,而数据存储在 DataNode 的集群上。NameNode 不仅要管理存储在 HDFS 上内容的元数据,而且要记录一些事情,比如哪些节点是集群的一部分,某个文件有几份副本等。它还要决定当集群的 节点宕机或者数据副本丢失的时候系统需要做什么。

存储在 HDFS 上的每份数据片有多份副本 (replica) 保存在不同的服务器上。在本质上,NameNode 是 HDFS 的 Master(主服务器),DataNode 是 Slave(从服务器)。

3、HDFS 写过程

NameNode 负责管理存储在 HDFS 上所有文件的元数据,它会确认客户端的请求,并记录下文件的名字和存储这个文件的 DataNode 集合。它把该信息存储在内存中的文件分配表里。

例如,客户端发送一个请求给 NameNode,说它要将“zhou.log”文件写入到 HDFS。那么,其执行流程如图 1 所示。具体为:

第一步:客户端发消息给 NameNode,说要将“zhou.log”文件写入。(如图 1 中的①)

第二步:NameNode 发消息给客户端,叫客户端写到 DataNode A、B 和 D,并直接联系 DataNode B。(如图 1 中的②)

第三步:客户端发消息给 DataNode B,叫它保存一份“zhou.log”文件,并且发送一份副本给 DataNode A 和 DataNode D。(如图 1 中的③)

第四步:DataNode B 发消息给 DataNode A,叫它保存一份“zhou.log”文件,并且发送一份副本给 DataNode D。(如图 1 中的④)

第五步:DataNode A 发消息给 DataNode D,叫它保存一份“zhou.log”文件。(如图 1 中的⑤)

第六步:DataNode D 发确认消息给 DataNode A。(如图 1 中的⑤)

第七步:DataNode A 发确认消息给 DataNode B。(如图 1 中的④)

第八步:DataNode B 发确认消息给客户端,表示写入完成。(如图 1 中的⑥)

Hadoop 分布式文件系统 HDFS 的工作原理

图 1 HDFS 写过程示意图

在分布式文件系统的设计中,挑战之一是如何确保数据的一致性。对于 HDFS 来说,直到所有要保存数据的 DataNodes 确认它们都有文件的副本 时,数据才被认为写入完成。因此,数据一致性是在写的阶段完成的。一个客户端无论选择从哪个 DataNode 读取,都将得到相同的数据。

4、HDFS 读过程

为了理解读的过程,可以认为一个文件是由存储在 DataNode 上的数据块组成的。客户端查看之前写入的内容的执行流程如图 2 所示,具体步骤为:

第一步:客户端询问 NameNode 它应该从哪里读取文件。(如图 2 中的①)

第二步:NameNode 发送数据块的信息给客户端。(数据块信息包含了保存着文件副本的 DataNode 的 IP 地址,以及 DataNode 在本地硬盘查找数据块所需要的数据块 ID。) (如图 2 中的②)

第三步:客户端检查数据块信息,联系相关的 DataNode,请求数据块。(如图 2 中的③)

第四步:DataNode 返回文件内容给客户端,然后关闭连接,完成读操作。(如图 2 中的④)

Hadoop 分布式文件系统 HDFS 的工作原理

图 2 HDFS 读过程示意图

客户端并行从不同的 DataNode 中获取一个文件的数据块,然后联结这些数据块,拼成完整的文件。

5、通过副本快速恢复硬件故障

当一切运行正常时,DataNode 会周期性发送心跳信息给 NameNode(默认是每 3 秒钟一次)。如果 NameNode 在预定的时间内没有收 到心跳信息(默认是 10 分钟),它会认为 DataNode 出问题了,把它从集群中移除,并且启动一个进程去恢复数据。DataNode 可能因为多种原因脱 离集群,如硬件故障、主板故障、电源老化和网络故障等。

对于 HDFS 来说,丢失一个 DataNode 意味着丢失了存储在它的硬盘上的数据块的副本。假如在任意时间总有超过一个副本存在(默认 3 个),故 障将不会导致数据丢失。当一个硬盘故障时,HDFS 会检测到存储在该硬盘的数据块的副本数量低于要求,然后主动创建需要的副本,以达到满副本数状态。

6、跨多个 DataNode 切分文件

在 HDFS 里,文件被切分成数据块,通常每个数据块 64MB~128MB,然后每个数据块被写入文件系统。同一个文件的不同数据块不一定保存在相同的 DataNode 上。这样做的好处是,当对这些文件执行运算时,能够通过并行方式读取和处理文件的不同部分。

当客户端准备写文件到 HDFS 并询问 NameNode 应该把文件写到哪里时,NameNode 会告诉客户端,那些可以写入数据块的 DataNode。写完一批数据块后,客户端会回到 NameNode 获取新的 DataNode 列表,把下一批数据块写到新列表中的 DataNode 上。

Hadoop 如何修改 HDFS 文件存储块大小  http://www.linuxidc.com/Linux/2013-09/90100.htm

将本地文件拷到 HDFS 中 http://www.linuxidc.com/Linux/2013-05/83866.htm

从 HDFS 下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm

将本地文件上传至 HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm

HDFS 基本文件常用命令 http://www.linuxidc.com/Linux/2013-09/89658.htm

Hadoop 中 HDFS 和 MapReduce 节点基本简介 http://www.linuxidc.com/Linux/2013-09/89653.htm

《Hadoop 实战》中文版 + 英文文字版 + 源码【PDF】http://www.linuxidc.com/Linux/2012-10/71901.htm

Hadoop: The Definitive Guide【PDF 版】http://www.linuxidc.com/Linux/2012-01/51182.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-11/124747.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3155字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中