分布式文件系统HDFS

2018-06-17  本文已影响0人  Michaelhbjian

1.HDFS简介

正如其名,HDFS(Hadoop Distribution File System)是一个分布式文件系统,它在商用服务器集群中存储文件,用来存储和快速访问大文件与大数据集。这是一个可扩展、可容错的系统。

HDFS的优点:

HDFS的局限性:

2.HDFS相关概念

2.1 块结构

HDFS是一个块结构的文件系统。正像Linux文件系统那样,HDFS把文件分成固定大小的块通常叫做分块或者分片,每个快作为独立的单元进行存储。默认的块大小为64MB,但是可以配置。我们所熟悉的普通文件系统的块一般只有几千字节,从这个块的大小清楚的看到,HDFS不是用来存储小文件的,这样做的好处就是最小化寻址开销。HDFS采用抽象的块概念可以带来以下几个明显的好处:

2.2 HDFS主要组件的功能

一个HDFS集群包含两种类型的节点:NameNodeDataNode

NameNode DataNode
存储元数据 存储文件内容
元数据保存在内存中 文件内容保存在磁盘
保存文件,block,datanode之间的映射关系 维护了block id到datanode本地文件的映射关系

NameNode周期性接收来自HDFS集群中DataNode的两种类型的消息,分别叫做心跳消息和块报告消息。DataNode发送一个心跳消息来告知NameNode工作正常。块报告消息包含一个DataNode上所有数据块的列表。

2.3名称节点 NameNode

•在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即FsImageEditLog

NameNode记录了每个文件中各个块所在数据节点的位置信息。

image.png

FSImage文件

FsImage文件包含文件系统中所有目录和文件inode的序列化形式。每个inode是一个文件或目录的元数据的内部表示,并包含此类信息:文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块。对于目录,则存储修改时间、权限和配额元数据。

FsImage文件没有记录文件包含哪些块以及每个块存储在哪个数据节点。而是由名称节点把这些映射信息保留在内存中,当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的。

NameNode的启动

在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。

一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件。

名称节点起来之后,HDFS中的更新操作会重新写到EditLog文件中,因为FsImage文件一般都很大(GB级别的很常见),如果所有的更新操作都往FsImage文件中添加,这样会导致系统运行的十分缓慢,但是,如果往EditLog文件里面写就不会这样,因为EditLog要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。

2.4 数据节点DataNode

数据节点(DataNode)是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块列表。每个数据节点中的数据会保存在各自节点的本地Linux文件系统中。下面图是数据节点的存储目录:

image.png

2.5 第二名称节点SecondaryNameNode

NameNode运行期间EditLog不断变大的问题?

NameNode运行期间,HDFS的所有更新操作都是直接写到EditLog中,久而久之,EditLog文件将变得很大。虽然这对名称节点运行时候是没有什么明显影响的,但是,当名称节点重启的时候,名称节点需要先将FsImage里面的所有内容映像到内存中,然后再一条一条地执行EditLog中的记录,当EditLog文件非常大的时候,会导致名称节点启动操作非常慢,而在这段时间内HDFS系统处于安全模式,一直无法对外提供写操作,影响了用户的使用。

为了有效解决EditLog逐渐变大带来的问题,HDFS提供的解决方案是SecondaryNameNode第二名称节点,并且具有两个功能:

SecondaryNameNode一般是单独运行在一台机器上(Master)。

SecondaryNameNode的工作情况

FBFC5B5AE32A287428C9CF63F8BC9A8E.jpg

3.HDFS体系结构

HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读取请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点的数据实际上保存在本地Linux文件系统中的。每个数据节点会周期性向名称节点发送“心跳”信息,报告自己的状态,没有按时发送心跳信息的数据节点会被标记为“宕机”,不会再给它分配任何IO请求。

image.png

HDFS是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输。所有的HDFS通信协议都是构建在TCP/IP协议基础之上的。

4. HDFS存储原理

4.1 冗余数据保存

作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上。这种多副本方式具有以下几个优点:

例如,数据块1被分别存放到数据节点A和C,数据块2被存放在数据节点A和B上。

4B9FF6C0B0332097AFB9FD341D7134E4.jpg

4.2 数据存取策略

4.2.1 数据存放

为了提高数据的可靠性与系统的可用性,以及充分利用网络带宽,HDFS采用了以机架(RACK)为基础的数据存放策略。HDFS默认每个数据节点都是在不用的机架上,这种方法会存在一个缺点:

但是和这种缺点相比,也有很多显著的优点:

问题:什么叫做机架(RACK)?

image.png

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

A76C45E3F15C56B2E9419535279DB65B.jpg
4.2.2 数据读取

HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID。当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据。

4.2.3 数据复制

HDFS的数据复制采用流水线复制的策略,大大提高了数据复制过程的效率。

4.3 数据错误与恢复

4.3.1 名称节点出错

名称节点保存了所有的元数据信息,其中,最核心的两个数据结构是FSImageEditlog,如果这两个文件发生损坏,那么整个HDFS实例将失效。因此,HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。当名称节点出错时,就可以根据备份服务器SecondaryNameNodeFSImageEditlog数据进行恢复。

4.3.2 数据节点出错

每个数据节点定期会向名称节点发送“心跳”信息,向名称节点报告自己的状态。当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”,节点上面的所有书都会被标记为“不可读”,名称节点不会给它们发送任何IO请求。

4.3.3 数据出错

网络传输和磁盘错误等因素会造成数据错误。客户端在读取数据后,会采用MD5SHA1对数据块进行校验,以确定读取到正确的数据。

5. HDFS数据读写过程

5.1 读取

当一个客户端应用想要读取一个文件时,它首先访问NameNodeNameNode以组成文件的所有文件块的位置来响应。块的位置标识了持有对应文件块数据的DataNode客户端紧接着直接向DataNode发送读请求,以获取每个文件块。NameNode不参与从DataNode到客户端的实际数据传输过程。

78A11F34B486747FEDD3D64F5B4A4B5C.jpg

5.2 写入

当客户端应用想要写数据到HDFS文件时,它首先访问NameNode并要求它在HDFS命名空间中创建一个新的条目。NameNode会检查同名文件是否已存在以及客户端是否有权限来创建新文件。

8DCE235FD0174635257CC244595D3AAA.jpg

参考资料

http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html

http://dblab.xmu.edu.cn/post/bigdataroadmap/

上一篇下一篇

猜你喜欢

热点阅读