码迷,mamicode.com
首页 > 其他好文 > 详细

HdfS体系结构

时间:2016-08-19 18:44:03      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

体系结构

 

从上图可以看出NameNode节点:Hadoop1.x的版本中,NameNode节点只有一个,所以NameNode节点为非HA(不是高可用的,后面会详细讨论)。在Hadoop2.X的版本中,NameNode节点可以有很多个。所以在Hadoop2.x的版本中,NameNode节点是HA的。(高可用的)。该节点主要负责管理文件系统命名空间、集群配置和数据块的复制等

DataNode节点:是文件存储的基本单元,它以数据块的形式保存了hdfs中文件的内容和数据块的数据校验信息。SecondaryNameNode节点:配合NameNode节点管理元数据

通信协议

ClientNameNode通信遵循ClientProtocol协议

NameNodeDataNode通信遵循DataNodeProtocol协议

block

block为块,是hdfs最小存储单位。

HDFS中,有一个特别重要的概念:数据块(Block)。前面介绍到,在HDFS中存储的文件都是超大数据的文件,我们可以把这个超大规模的文件以一个标准切分成几块,分别存储到不同的磁盘上。这个标准就称为BlockBlock 默认的大小为64M。这样做有以下几点好处:

1 文件块可以保存在不同的磁盘上。在HDFS系统中,一个文件可以分成不同的Block存储在不同的磁盘上。

2 简化存储系统。这样不需要管理文件,而是管理文件块就可以了。

3 有利于数据的复制。在HDFS系统中,一个数据节点一般会复制3

NameNode

 

如图为NameNode做的事情:维护着整个文件系统的文件目录树

 

 

 

从上图可以看出,NameNode维护两层关系。第一关系为文件\目录的元信息和文件的数据块的关系,/txt/exec/a.txt分为三个数据块存储b1,b2,b3/word/exec/b.doc分为两个数据块存储b4,b5。第二关系为数据块信息与数据节点之间的关系。从图中也可以看出来b1DataNode1,DataNode2,DataNode3节点都有。b2DataNode1,DataNode2,DataNoden节点。依次类推。以上的信息以两种形式存储在本地文件系统中。一种是命名空间镜像(File System Image,FSImage,也称为文件系统镜像),另一种是命名空间镜像的编辑日志(Edit Log)

HDFS运行的过程中,NameNode节点还能获取HDFS整体运行的状态信息。如系统的可用空间、已经使用的空间、各数据节点的当前状态等。

FSImage

命名空间镜像保存着某一特定时刻HDFS的目录树、元信息和数据块索引信息。

EditLog

当在HDFS中,后续对FSImage的改动则放在编辑日志中。

SecondaryNameNode

hadoop1.0产物。用户定期合并FSImageEditLog。在大规模集群的情况下,SecondaryNameNode是单独一台机器的。该节点根据集群配置的时间间隔,不停地获取HDFS某一个时间点的FSImageEditLog,合并得到一个新的FSImage。这个新的FSImage会上传到NameNode节点上,替换原来的NameNode上的FSImage,并清空上述日志。这种机制称为Checkpoint机制。这样避免了EditLog过大,导致NameNode启动时间过长的问题。但是如果NameNode出现故障,SecondaryNameNode是不能帮助NameNode进行自动恢复的。

Checkpoint的触发机制有两种。一种是设置两次checkpoint之间的最大间隔时间。默认为3600秒,也就是说每3600秒触发一次checkpoint。一种是规定edit文件的最大值。当文件超过该值以后,触发一次checkpoint

 

 

上图为在secondarynamenode中发生的事情:

1、 SecondaryNameNode通过RPC技术远程调用NameNode中的getEditLogSize方法,获取到NameNode节点上编辑日志的大小

2、 如果编辑日志很小,SecondaryNameNode就不需要合并元数据镜像和编辑日志。

3、 继续通过RPC技术远程调用rollEditLog方法,启动一次checkpoint过程

4、 NameNode在调用rollEditLog方法之前,需要创建一个新的编辑日志文件edit.new。后续对文件系统元数据的改动,都会记录到edit.new文件中。

5、 SecondaryNameNode通过RPC技术把NameNode中的fsimageedit文件读取过来,在内存中进行合并(3,4)

6、 在SecondaryNameNode中,在内存中合并的文件为fsimage.ckpt

NameNode通过RPC技术把fsimage.ckpt下载到本地,把fsimage.ckpt覆盖掉原来的fsimage,形成新的fsimage,把原来的edit.new改成edit

DataNode

hadoop,数据是存放在DataNode上面的。是以Block形式存储的。

DataNode节点会不断向NameNode节点报告。初始化时,每个数据节点将当前存储的数据块告知NameNode节点。后续DataNode节点在工作的过程中,数据节点仍会不断的更新 NameNode节点与之对应的元数据信息,并接受来自NameNode节点的指令,创建、移动或者删除本地磁盘上的数据块。

DataNode启动与心跳

 

从上图可以看出,当DataNode启动的时候

1 检查版本号:检查本地的版本号和NameNode中的版本号是否一致

2DataNode节点注册到NameNode

3 DataNode需要向NameNode报告其数据节点的blocks信息

4 之后DataNode会一直向NameNode发出心跳信息

SecordaryNameNode

HdfS体系结构

标签:

原文地址:http://www.cnblogs.com/zpb2016/p/5788406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!