NameNode (NN) 和 SecondayNameNode (2NN) 的工作机制

本文详细解析Hadoop中NameNode与SecondaryNameNode如何维护元数据,通过FsImage和Edits文件确保数据安全与高效。同时阐述DataNode如何存储和报告数据块信息,以及集群安全模式和数据完整性的保障机制。
部署运行你感兴趣的模型镜像

NameNode (NN) 和 SecondayNameNode (2NN) 的工作机制

首先,我们需要思考NameNode中的元数据是存储在什么中?是内存中还是磁盘中呢?显然如果只存在内存中的话,一旦断电,元素据就丢失了,整个集群就无法工作。如果存在NN节点的磁盘中话,因为需要进行随机访问,还要响应客户请求,效率必然会很低。因此元数据在内存上工作的同时,会在磁盘中备份元数据的一个镜像 FsImage,这样既能保证高效的工作,又能保证数据的安全。但是这样的话又会带来新的问题,我们不妨想象一下内存中的元数据如果在频繁的更新,那我们的FsImage也会同时更新吗?这时效率很低的。如果不更新,那这个备份就没有意义了,一旦断电,元数据仍然会丢失。因此我们在这里引入了Edits文件,修改日志。那么修改日志又承担了怎样的责任呢。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中,只进行追加操作,效率很高。也就是说Edits文件会记录内存中的元数据是如何变化的。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。如果NN自己负责合成的话,任然会导致效率很低,所以这时后2NN就会登场,Edits和FsImage都会拷贝到2NN中,2NN负责合成 (所谓合并,就是将Edits和Fsimage加载到内存中,照着Edits中的操作一步步执行,最终形成新的Fsimage)。

Fsimage:NameNode内存中元数据序列化后形成的文件。

Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。

NameNode启动时,先滚动Edits并生成一个空的edits.inprogress,然后加载Edits和Fsimage到内存中,此时NameNode内存就持有最新的元数据信息。Client开始对NameNode发送元数据的增删改的请求,这些请求的操作首先会被记录到edits.inprogress中(查询元数据的操作不会被记录在Edits中,因为查询操作不会更改元数据信息),如果此时NameNode挂掉,重启后会从Edits中读取元数据的信息。然后,NameNode会在内存中执行元数据的增删改的操作。

由于Edits中记录的操作会越来越多,Edits文件会越来越大,导致NameNode在启动加载Edits时会很慢,所以需要对Edits和Fsimage进行合并(所谓合并,就是将Edits和Fsimage加载到内存中,照着Edits中的操作一步步执行,最终形成新的Fsimage)。SecondaryNameNode的作用就是帮助NameNode进行Edits和Fsimage的合并工作。

SecondaryNameNode首先会询问NameNode是否需要CheckPoint(触发CheckPoint需要满足两个条件中的任意一个,定时时间到和Edits中数据写满了)。直接带回NameNode是否检查结果。SecondaryNameNode执行CheckPoint操作,首先会让NameNode滚动Edits并生成一个空的edits.inprogress,滚动Edits的目的是给Edits打个标记,以后所有新的操作都写入edits.inprogress,其他未合并的Edits和Fsimage会拷贝到SecondaryNameNode的本地,然后将拷贝的Edits和Fsimage加载到内存中进行合并,生成fsimage.chkpoint,然后将fsimage.chkpoint拷贝给NameNode,重命名为Fsimage后替换掉原来的Fsimage。NameNode在启动时就只需要加载之前未合并的Edits和Fsimage即可,因为合并过的Edits中的元数据信息已经被记录在Fsimage中。

2.集群的安全模式

集群的安全模式,就是在在集群启动时的一个保护机制。集群启动时主要涉及到 NameNode 和 DataNode。集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。

NameNode启动时,首先会将Fsimage载入内存,并执行Edits中各项操作 (确保载入内存的是最新的元数据,因为可能没达到checkpoint的Edits和Fsimage还没有传入到2NN,所以用自己存在磁盘中的最新的 ),只有到达checkpoint以后,一份完整的Fsiamge和Edits才会传入2NN。一旦在内存中成功建立文件系统的元数据映像,则创建一个新的Fsimage文件和一个空的编辑日志。此是NameNode开始监听DataNode请求。这个过程期间,NameNode一直运行在安全模式中,NameNode的文件系统对于客户端来说只能读和下载不能修改。

当DataNode启动时,NameNode才能通过DataNode的反馈得到我们存储的数据的信息。因为数据是以数据块的形式存储在DataNode中的。只能当DataNode启动后,才能对数据进行修改操作。

当DataNode向NameNode反馈时,如果发现丢失超过两个数据块,安全模式则无法自动退出。如果满足“最小副本条件”,NameNode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。

(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)

(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)

(3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)

(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)

3.NameNode多目录配置

NameNode 的本地目录可以配置成多个,且每个目录存放的内容相同,增加可靠性。注意每个目录存放的内容相同。 DataNode也可以配置多个目录,且每个目录存放的内容不同。每个目录存储的数据不一样。即:数据不是副本

4.DataNode的工作机制

一个数据块在DataNode上以文件的形式存储在磁盘上,包括两个文件,一个时是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。-------(数据文件,校验文件,时间戳)校验数据的完整性。

DateNode启动后回向NameNode注册,通过后,每1个小时的向NameNode上报所有的块信(DateNode在启动时会立即向NameNode汇报一次数据块信息。用来确定安全模式的退出)。

心跳每3秒一次,心跳返回结果带有NameNode给DataNode的指令(比如删除,复制数据块),如果超过10分30秒没有收到某个DataNode的心跳,则认为该结点不可用。

5.数据完整性

当DataNode收到客户端请求访问数据以后。DataNode在读取Block数据块时,会计算CheckSum,当计算后的值如Block创建时的值不一样,则会认为Block已经损坏,Client读取其他DataNode上的Block。

也就是说,当客户端请求访问数据块是,DataNode会查看Block是否完整,完整后再返回。

通过crc校验算法检查其完整性。

6.服役新节点

1)需求

随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。

2)环境准备

(1)在hadoop104主机上再克隆一台hadoop105主机

(2)修改IP地址和主机名称

(3)删除原来HDFS文件系统留存的文件(/opt/module/hadoop-3.1.3/data和logs)

(4)source一下配置文件

克隆-------修改主机名和IP------删除克隆机的logs和data文件----source配置文件

source配置文件:source /etc/profile

单点启动:hdfs -daemon start datanode

​ yarn -daemon start nodemanager

7.退役旧节点

添加白名单和黑名单

白名单和黑名单是hadoop管理集群主机的一种机制。

添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被退出。

添加到黑名单的主机节点,不允许访问NameNode,会在数据迁移后退出。

实际情况下,白名单用于确定允许访问NameNode的DataNode节点,内容配置一般与workers文件内容一致。 黑名单用于在集群运行过程中退役DataNode节点。

配置白名单和黑名单的具体步骤如下:

1)在NameNode节点的/opt/module/hadoop-3.1.3/etc/hadoop目录下分别创建whitelist 和 blacklist文件,touch whitelist, touch blacklist

在whitelist中添加如下主机名称,假如集群正常工作的节点为102 103 104 105

hadoop102

hadoop103

hadoop104

hadoop105

2)在hdfs-site.xml配置文件中增加dfs.hosts和 dfs.hosts.exclude配置参数

dfs.hosts

/opt/module/hadoop-3.1.3/etc/hadoop/whitelist

dfs.hosts.exclude

/opt/module/hadoop-3.1.3/etc/hadoop/blacklist

分发配置文件whitelist,blacklist,hdfs-site.xml (注意:105节点也要发一份)

3)分发配置文件whitelist,blacklist,hdfs-site.xml (注意:105节点也要发一份)

[william@hadoop102 etc]$ xsync hadoop/

[william@hadoop102 etc]$ rsync -av hadoop/ william@hadoop105:/opt/module/hadoop-3.1.3/etc/hadoop/

重新启动集群(注意:105节点没有添加到workers,因此要单独起停)

hdfs –daemon start datanode

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 回答1: Hadoop是一个分布式存储计算系统。它由一组节点组成,每个节点都有存储计算功能。 Hadoop中有两种节点:NameNodeDataNode。 NameNodeHadoop的管理节点,负责维护文件系统的元数据,即文件名、块位置、块大小等信息。它还负责维护文件系统的命名空间,即文件目录结构。 DataNode是Hadoop的存储节点,负责存储文件的实际数据块。它接收来自NameNode的命令,将数据块写入磁盘,并在需要时将数据块读取出来。 Hadoop中还有一个组件:SecondaryNameNode。它的作用是定期从NameNode拉取元数据的副本,并与NameNode进行同步。如果NameNode出现故障,可以使用SecondaryNameNode上的元数据副本来恢复。 简而言之,NameNode负责文件系统的元数据管理命名空间维护,DataNode负责存储文件的实际数据块,SecondaryNameNode负责与NameNode的元数据同步。 ### 回答2Hadoop中的NameNodeNNSecondaryNameNode2NN)是HDFS(分布式文件系统)的重要组件,它们都承担着维护文件系统元数据的责任,但在工作原理上有所不同。 NameNode是HDFS的主节点,它负责管理文件系统的命名空间其它重要的元数据信息。当客户端请求执行某个文件操作时,首先会与NameNode通信,NameNode会返回相应的数据块所在的DataNode列表,然后客户端才能与对应的DataNode进行通信。NameNode还记录了文件的层次结构、文件块的位置、复本数量以及各个DataNode的健康状况等信息。NameNode将元数据信息存储在内存中,并定期将其持久化到本地磁盘以防止系统故障时的数据损失。因此,NameNode工作可简单概括为处理元数据请求、维护文件系统结构、存储数据块位置信息。 SecondaryNameNode(或者称为CheckpointNode)并不是NameNode的替代物,仅用于辅助NameNode进行元数据的备份合并。SecondaryNameNode根据预定的时间间隔或事务数目,从主节点中得到元数据的快照,并将其存储在本地文件系统上。这样就可以在主节点出现故障的情况下,通过使用SecondaryNameNode上的快照信息来恢复主节点。此外,SecondaryNameNode还负责合并NameNode的编辑日志,将内存中的元数据信息与编辑日志中存储的增量变更合并,减轻了NameNode的元数据负担。 综上所述,NameNodeHadoop中负责管理文件系统元数据的主节点,而SecondaryNameNode则是辅助NameNode进行备份合并工作的节点。它们的工作原理是相辅相成的,共同维护HDFS的可靠性高可用性,在大规模数据存储处理的分布式环境中起到了关键的作用。 ### 回答3: Hadoop中的NNNameNode2NN(Secondary NameNode)是Hadoop分布式文件系统(HDFS)中的关键组件,它们共同协同工作来保障数据的高可用性数据一致性。 NN是HDFS的主节点,负责存储管理文件系统的元数据信息,包括文件目录的命名空间、块到数据节点的映射关系等。NN也负责处理客户端的文件操作请求,例如文件的读写、创建删除等。NN将元数据以文件(fsimage)编辑日志(edits)的形式存储在本地磁盘上。NN工作原理如下: 1. 当客户端发起文件写入请求时,NN接收到请求后会先将文件的元数据记录到内存中,并返回给客户端一个文件写入路径。 2. 当客户端结束文件写入后,NN将文件划分为固定大小的数据块,并记录下每个数据块所在的数据节点信息。 3. 当客户端请求文件读取时,NN根据文件元数据信息获取到数据块的位置,并返回给客户端所需的数据节点信息。 2NNNN的辅助节点,它主要用来定期合并NN的文件系统元数据编辑日志,生成新的文件系统镜像(fsimage)编辑日志快照(edits),以便在NN发生故障时进行故障恢复。2NN工作原理如下: 1. 2NN定期从NN获取文件系统的编辑日志,并将这些编辑日志合并到之前的镜像文件上,生成新的文件系统镜像编辑日志快照。 2. 当NN发生故障时,2NN可以用其最新的文件系统镜像编辑日志快照来帮助恢复NN,以保障文件系统的高可用性。 总结来说,NN负责管理HDFS的文件系统元数据信息处理客户端的文件操作请求,2NN则负责定期合并NN的元数据信息编辑日志,以备份恢复NN的故障。通过NN2NN的协同工作Hadoop能够提供高可用性的分布式文件存储处理服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值