初学者不得不看看的大数据——HDFS

初学者不得不看看的大数据——HDFS

导读
若非因生活所迫,我也不想把自己弄得一身才华
在现阶段,大数据将是我学习的方向
欢迎热爱大数据或从事大数据先关工作的广大朋友指出我的不足

一、认识集群与介绍集群结构

普通的文件系统只需要单个计算机节点就可以完成文件的存储和处理,单个计算机节点由处理器、内存、高速缓存和本地磁盘构成。通俗点说就是单机。而分布式文件系统是把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群。通俗点说相当于多个单机。后者比前者好在硬件上的开销,等价于降低成本。

初学者不得不看看的大数据——HDFS

​ 通常集群中的计算机节点存放在机架(Rack)上,每个机架可以存放8~64个节点,同一机架上的不同节点之间可以通过网络互联(常采用吉比特以太网),不同机架之间采用另一种网络或交换机互联。

二、分布式文件系统的结构

​ 分布式文件系统在物理结构上是由计算机集群中的多个节点构成的。

初学者不得不看看的大数据——HDFS

三、HDFS的相关概念

3.1 名称节点和数据节点

在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即FsImage 和 EditLog.说到这里当然要介绍FsImage 和 EditLog了。

初学者不得不看看的大数据——HDFS

FsImage:用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。如果有读者不明白元数据是什么,我简单地说下元数据:相当于物品的说明书,比如结构说明、信息参数等等。

EditLog:记录操作的日志文件,如文件的创建、删除、重命名等操作。

这里关于名称节点(NameNode)有个注意点,名称节点记录了每个文件中各个块所在的数据节点的位置信息,但并不持久化存储这些信息,而是在系统每次启动时扫描所有的数据节点重构得到这些信息的。

数据节点(DataNode):是分布式文件系统HDFS 的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。每个数据节点的数据实际上是保存在本地Linux文件系统中的,且每个数据节点会周期性地向名称节点发送心跳信息,报告自己的状态,若没有按时发送信息的数据节点会被标记为“宕机”,不会再给他分配任何I/O请求

3.2 第二名称节点

第二名称节点(Secondary NameNode)的出现,是为了解决 EditLog 文件逐渐变大带来的问题。因为在名称节点运行期间,HDFS不断进行发生更新操作,所以 EditLog 文件越来越大。名称节点运行期间,不会受到 EditLog 文件愈大,而产生显著的影响。而是名称节点重启时,将会受到很大的影响,因为需要将 FsImage 加载到内存中,然后逐条执行 EditLog 文件中的记录。

第二名称节点具有两个方面的功能:第一方面,可以完成 EditLog 与 FsImage 的合并操作,减小EditLog文件的大小,缩短名称节点重启时间;第二方面,作为名称节点的“检查点”,保存名称节点中的元数据信息。

初学者不得不看看的大数据——HDFS

为此,对第二方面做出解释,当名称节点发生故障时,就可以用第二名称节点中记录的元数据信息进行系统恢复(得到的是t1时刻,EditLog 与 FsImage 的合并操作),而名称节点在t1时刻和t2时刻期间发生的故障,系统就会丢失部分元数据信息。

3.3 HDFS体系结构

HDFS 采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。

初学者不得不看看的大数据——HDFS

客户端访问一个文件时,流程如下:首先把文件名发送给名称节点,名称节点根据文件名找到相对应的数据块(一个文件可能包括多个数据块),再根据每个数据块信息找到实际存储各个数据块的数据节点位置,并把数据节点位置发送给客户端,最后完成访问。注意,在访问的过程中,名称节点不参与数据的传输。客户端与数据节点的交互是通过RPC(Remote Procedure call)来实现的。

HDFS体系结构的局限性,这里我简单地说明一下,主要有:1、命名空间的限制。2、性能的瓶颈(主要是因为整个分布式文件系统的吞吐量受限于单个名称节点的吞吐量)3、隔离问题。4、集群的可用性。

HDFS具有不错的容错性,下面我用一张图来解释。

初学者不得不看看的大数据——HDFS

也就是 具有文件拥有多个副本, 而且不是全都在一个机架上,避免一个机架故障,所有数据丢失。这种多副本具有以下3个优点。

1、加快数据传输速度。当多个客户端需要同时访问同一个文件时,可以让各个客户端分别从不同的数据块副本中读取数据,这就大大加快了数据传输速度。

2、容易检查数据错误。HDFS的数据节点之间通过网络传输数据,采用多个副本可以很容易判断数据传输是否出错。

3、保证数据的可靠性。即使某个数据节点出现故障,也不会造成数据丢失。

3.4 副本的放置

​ 上面提到副本,这里将说明副本的放置的策略。HDFS默认的冗余复制因子是3,每个文件块会被同时保存到3个地方,其中,有两份副本放在同一个机架的不同机器上面,第三个副本放在不同机架的机器上面,这样既可以保证机架发生异常时的数据恢复,也可以提高数据读写性能。

初学者不得不看看的大数据——HDFS