本期,边肖将给大家带来关于HDFS工作原理的信息。文章内容丰富,从专业角度进行分析和描述。希望你看完这篇文章能有所收获。
Hadoop分布式文件系统(HDFS)是一个设计用于在通用硬件上运行的分布式文件系统。HDFS是一个高容错系统,适合部署在廉价机器上。它可以提供高吞吐量的数据访问,非常适合大规模数据集。要了解HDFS的内部工作原理,我们必须首先了解什么是分布式文件系统。
1、分布式文件系统
多台计算机在互联网上协同工作(有时称为集群)可以像单个系统一样解决一些问题,我们称之为分布式系统。
分布式文件系统是分布式系统的一个子集,它们解决的问题是数据存储。换句话说,它们是跨越多台计算机的存储系统。存储在分布式文件系统中的数据自动分布在不同的节点上。
分布式文件系统在大数据时代有着广阔的应用前景,为存储和处理来自网络等地的超大规模数据提供了必要的扩展能力。
2、分离元数据和数据:NameNode和DataNode
存储在文件系统中的每个文件都有关联的元数据。元数据包括文件名、信息节点号、数据块位置等。而数据是文件的实际内容。
在传统的文件系统中,由于文件系统不跨多台机器,元数据和数据存储在同一台机器上。
为了构建一个分布式文件系统,使客户端可以方便地使用它,而不需要知道其他客户端的活动,那么就需要在客户端之外维护元数据。HDFS的设计思路是拿出一台或多台机器来存储元数据,让剩下的机器来存储文件的内容。
名称节点和数据节点是HDFS的两个主要组成部分。其中,元数据存储在名称节点上,而数据存储在数据节点的集群上。名称节点不仅管理存储在HDFS的内容的元数据,还记录一些事情,例如哪些节点是集群的一部分,以及一个文件有多少副本。它还决定了当集群的节点宕机或数据拷贝丢失时,系统需要做什么。
存储在HDFS的每一份数据都有多个副本存储在不同的服务器上。本质上,名称节点是HDFS的主节点,数据节点是从节点。
3、HDFS写过程
名称节点负责管理存储在HDFS的所有文件的元数据。它将确认客户端的请求,并记录文件的名称和存储该文件的数据节点集合。它将这些信息存储在内存中的文件分配表中。
例如,客户端向名称节点发送一个请求,请求它将“zhou.log”文件写入HDFS。然后,执行流程如图1所示。具体来说:
* * *步骤:客户端向名称节点发送一条消息,表示它想要写入“zhou.log”文件。(如图1所示)
第二步:NameNode向客户端发送消息,要求客户端写DataNode A、B、D,直接联系DataNode B(见图1中)
第三步:客户端向数据节点B发送消息,要求其保存一个“周.日志”文件,并向数据节点A和数据节点d发送副本(如图1中的)
第四步:数据节点B向数据节点A发送消息,要求其保存一个“zhou.log”文件,并向数据节点d发送一个副本(如图1中的)
第五步:数据节点A向数据节点D发送消息,要求其保存一个“week.log”文件。(参见图1中的)
第六步:数据节点D向数据节点a发送确认消息(见图1)
第七步:数据节点A向数据节点b发送确认消息(如图1中的)
第八步:数据节点B向客户端发送确认消息,表示写入完成。(图1中的图6)
图1 HDFS写入过程示意图
在分布式文件系统的设计中,挑战之一是如何保证数据的一致性。对于HDFS,在所有希望保存数据的数据节点确认它们拥有文件的副本之前,不会考虑写入数据。因此,数据一致性在写入阶段完成。无论客户端选择从哪个数据节点读取数据,都会得到相同的数据。
4、HDFS读过程
为了理解读取过程,文件可以被认为是由存储在数据节点上的数据块组成的。客户端查看之前写入内容的执行流程如图2所示,具体步骤如下:
* * *步骤:客户端询问名称节点应该在哪里读取文件。(图2中的图1)
第二步:名称节点将数据块的信息发送给客户端。(数据块信息包含存储文件副本的DataNode的IP地址,以及DataNode在本地硬盘中查找数据块所需的数据块ID。)(如图2所示)
第三步:客户端检查数据块信息,联系相关的数据节点,请求数据块。(图2中的图3)
p>
第四步:DataNode返回文件内容给客户端,然后关闭连接,完成读操作。(如图2中的④)
图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上。
上述就是小编为大家分享的HDFS的工作原理是什么呢了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/132535.html