Hadoop的NameNode和SecondaryNameNode的功能描述

弄明白了云计算和大数据以及hadoop的概念,思想交给哲学家,我们来研究一下技术实现

hadoop这个家伙是怎么个构造?怎么实现的大数据存储?怎么实现的大数据计算?

首先我们来看构造NameNode和SecondaryNameNode,这俩是hadoop的管理者,

我们来主要研究下这俩小兄弟都做了什么工作?

举例说明:现在我要使用hadoop存储一个640M的数据,hadoop会将这个数据进行拆分,拆分成10份,每一份64M(当然这个64不是固定的可以通过配置文件进行更改)

然后将这10份数(我们起名字D1-D10)据存储到DataNode上。

假设有DataNode1存储了D1,DataNode2存储了D1,D1,D2(为什么出来两个D1两个D2  这是HDFS的特点,数据备份,防止DataNode1损坏数据丢失)DataNode3存储了D2,D2,D3.

那么以上这些信息都会被存储到NameNode中。NameNode怎么知道哪一个DataNode保存了哪一些block?是DataNode启动的时候向NameNode汇报的。

这个地方要说一些NameNode与DataNode的关系,他们是一种主从结构的关系,他们之间是通过心跳建立链接互通数据的。一旦心跳链接断开(一方得不到另一方发来的信息,一般是指NameNode得不到DataNode发来的信息),表示DataNode死亡。每一次心跳DataNode都会把我这个数据节点新增的block,待移除的block,无效的block,损坏的block,正在处理的block等信息传递到NameNode并得到NameNode的一个反馈完成此次心跳链接。

那么NameNode拿到这些信息后,存储到哪里呢?这里就要说到NameNode的两个重要文件

fsimage元数据镜像文件(说白了就是备份)

edits 元数据操作文件(说白了就是日志)

我们都知道备份是有实践点的,而日志会记录下系统当前最新的操作。所以有了备份和日志,实际上你就可以确保数据在损坏时最新的状态。这个时候你可能会说,那是不是要定时的去把备份更新一下啊,不然日志文件越来越大,备份的数据也会越来越古老。对的!!!应该是有这个操作,而且这个操作必须是个任务,每隔一定的时间就将日志中的变更同步到备份中。

那谁来做这个操作呢?你或许会说肯定是NameNode啊,这俩文件都在这上面!!!但是不是的,因为NameNode的主要工作还是对DataNode的管理,或者说给用户提供操作数据访问数据的服务!哪还有闲工夫管备份,忙都忙死了...

这个时候,SecondaryNameNode就出现了,这个小伙子就是帮助NameNode根据日志同步备份的。

也就是说SecondaryNameNode会定时的根据edits文件更新fsimage文件。也正是由于这份工作的特殊性,一旦NameNode死磕了,SecondaryNameNode会立马变身成为NameNode,保证系统正常运行。

就说这么多,没什么概念,就是描述一下自己的理解。实际上软件开发很难用概念去描述。网上技术博客很多,写的也比这详细的多,关键是理解,希望我上面的描述对你形成自己的理解有一定的帮助。我暂时就理解到这个程度。

猜你喜欢

转载自blog.csdn.net/wjyyawjx/article/details/84875782