zoukankan      html  css  js  c++  java
  • HdfS体系结构

    体系结构

    从上图可以看出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

  • 相关阅读:
    十天冲刺---Day10
    十天冲刺---Day9
    团队博客目录
    【Beta阶段】M2事后分析
    【Beta阶段】展示博客
    【Beta阶段】测试报告
    【Beta阶段】发布说明
    【Beta阶段】团队源代码管理
    【Beta阶段】第十次Scrum Meeting!!!
    【Beta阶段】第九次Scrum Meeting!(论坛已成功上线)
  • 原文地址:https://www.cnblogs.com/zpb2016/p/5788406.html
Copyright © 2011-2022 走看看