添加namenode详解
This commit is contained in:
parent
7347cd5633
commit
0d2ca989e7
@ -100,9 +100,43 @@ BlockManager内部的ReplicationMonitor线程会持续从其中取出数据并
|
||||
|
||||
NameNode不仅需要管理所有DataNode,由于数据写入前需要确定数据块写入位置,NameNode还维护着整个机架拓扑NetworkTopology。
|
||||
|
||||
|
||||
![pic](https://pan.zeekling.cn/zeekling/hadoop/nn_0008.png)
|
||||
|
||||
包含两个部分:机架拓扑结构NetworkTopology和DataNode节点信息。
|
||||
其中树状的机架拓扑是根据机架感知(一般都是外部脚本计算得到)在集群启动完成后建立起来,整个机架的拓扑结构在NameNode的生命周期内一般不会发生变化;
|
||||
另一部分是比较关键的DataNode信息,BlockManager已经提到每一个DataNode上的Blocks集合都会形成一个双向链表,
|
||||
更准确的应该是DataNode的每一个存储单元DatanodeStorageInfo上的所有Blocks集合会形成一个双向链表,这个链表的入口就是机架拓扑结构叶子节点即DataNode管理的DatanodeStorageInfo。
|
||||
|
||||
|
||||
## LeaseManager
|
||||
Lease 机制是重要的分布式协议,广泛应用于各种实际的分布式系统中。HDFS支持Write-Once-Read-Many,对文件写操作的互斥同步靠Lease实现。
|
||||
Lease实际上是时间约束锁,其主要特点是排他性。客户端写文件时需要先申请一个Lease,一旦有客户端持有了某个文件的Lease,其它客户端就不可能再申请到该文件的Lease,
|
||||
这就保证了同一时刻对一个文件的写操作只能发生在一个客户端。NameNode的LeaseManager是Lease机制的核心,
|
||||
维护了文件与Lease、客户端与Lease的对应关系,这类信息会随写数据的变化实时发生对应改变。
|
||||
|
||||
![pic](https://pan.zeekling.cn/zeekling/hadoop/nn_0009.png)
|
||||
|
||||
上图为为LeaseManager内存结构,包括以下三个主要核心数据结构:
|
||||
|
||||
- sortedLeases:Lease集合,按照时间先后有序组织,便于检查Lease是否超时;
|
||||
- leases:客户端到Lease的映射关系;
|
||||
- sortedLeasesByPath:文件路径到Lease的映射关系;
|
||||
|
||||
其中每一个写数据的客户端会对应一个Lease,每个Lease里包含至少一个标识文件路径的Path。
|
||||
Lease本身已经维护了其持有者(客户端)及该Lease正在操作的文件路径集合,之所以增加了leases和sortedLeasesByPath为提高通过Lease持有者或文件路径快速索引到Lease的性能。
|
||||
|
||||
当Lease发生超时后需要强制回收,内存中与该Lease相关的内容要被及时清除。超时检查及超时后的处理逻辑由LeaseManager.Monitor统一执行。
|
||||
LeaseManager中维护了两个与Lease相关的超时时间:软超时(softLimit)和硬超时(hardLimit),使用场景稍有不同。
|
||||
|
||||
客户端向集群写文件前需要向NameNode的LeaseManager申请Lease;写文件过程中定期更新Lease时间,以防Lease过期,周期与softLimit相关;写完数据后申请释放Lease。
|
||||
|
||||
整个过程可能发生两类问题:
|
||||
(1)写文件过程中客户端没有及时更新Lease时间;
|
||||
(2)写完文件后没有成功释放Lease。
|
||||
|
||||
两个问题分别对应为softLimit和hardLimit。两种场景都会触发LeaseManager对Lease超时强制回收。
|
||||
如果客户端写文件过程中没有及时更新Lease超过softLimit时间后,另一客户端尝试对同一文件进行写操作时触发Lease软超时强制回收;
|
||||
如果客户端写文件完成但是没有成功释放Lease,则会由LeaseManager的后台线程LeaseManager.Monitor检查是否硬超时后统一触发超时回收。
|
||||
|
||||
|
||||
转自:https://tech.meituan.com/2016/08/26/namenode.html
|
||||
|
Loading…
Reference in New Issue
Block a user