Hadoop学习笔记之二:NameNode
2013-08-12 17:07
375 查看
NameNode对三大协议接口(NamenodeProtocol、ClientProtoco、DatanodeProtocol)进行实现,利用ipc::Server通过三个协议分别向SNN、Client、DN提供RPC服务(参考:Hadoop IPC);
NameNode的核心是FSNamesysem;
FSNamesystem持有几大主要数据结构:FSDirectory维护系统目录结构、BlocksMap维护数据块信息、LeaseManagr维护租约信息;此外,还通过DatandeDescriptor、corruptReplicas等维护数据结点(DN)状态、坏副本等信息;
FSDirectory通过FSImage及FSEditLog保存目录结构的某一时刻镜像(image)及对镜像的修改(edit);其中,修改的内容可以通过EditLogOutputStream写出;
[b]Namespace(命名空间)[/b]
HDFS的Namespace(命名空间)用于记录系统中目录、文件、块之间的映射关系。[b]Namespace的内存结构[/b]
与传统使用习惯相同,HDFS使用了一棵树形结构。示意图如下:
INodeDirectory -/ |--- INodeFile -/ |--- BlockInfo |--- BlockInfo |--- INodeDirectory -/ |--- INodeFile |--- INodeFile
INodeDirectory代表目录,目录可以映射到子目录及文件,文件映射到相关的文件块。
最顶层的目录—根目录(rootDir)由FSDirectory结构记录。
[b]Namespace的外存存储[/b]
在需要的时候,NameNode可以将Namespace写出到磁盘。
写出时,从rootDir开始,对整棵命名树进行一次广度优先遍历,对遍历到的INode(INodeFile/INodeDirectory)依次写出到一个文件中。这个文件命名为fsImage。
fsImage是对Namespace的静态描述,在写出fsImage时,要求Namespace不可改变,而且比较耗时。
在整个系统提供连续服务的情况下,HDFS使用另一个文件记录Namespace的变化(添加/删除文件),对Namespace进行动态描述。这个文件命名为edits。
通过fsImage和edits的结合,可以即不影响服务,又能在外存记录Namespace的实时状态,避免因NameNode宕机造成元数据丢失。
[b]BlocksMap[/b]
BlocksMap是NameNode保存block对象的容器。
所有的Block对象被封装成BlockInfo对象,BlockInfo对象组织成HashMap进行存储;
BlockInfo对象使用多个(与复本个数相同)三元组(triplets)保存每个block复本的位置信息;
三元组中第一个位元指向相应复本所在的DataNode;如图中虚线所示;
第二个位元指向相同DataNode中前一个Block;第三个位元指向相同DataNode中后一个Block;如图中实现所示,从一个DatanodeDescriptor开始,通过一个双向链表,可以找到该DataNode上所有的Block;
[b]辅助线程[/b]
Namenode除服务主线程外,还有多个辅助线程如下:线程名 | 描述 |
hbthread | HeartbeatMonitor线程,每5秒运行一次,每5分钟检查一次节点列表,对心跳超时(10.5分种)的节点断定死亡;参见Heartbeat(心跳) |
lmthread | LeaseMonitor线程,每2秒检查租约是否超过hardLimit(1h);参见Lease(租约) |
smmthread | SafeModeMonitor线程,进入safeMode时才创建运行,每1秒钟检查一次是否可以离开,离开safeMode后线程结束;参见safeMode(安全模式) |
replthread | Replication线程,每3秒钟为Datanode分配replication任务,维护neededReplications和pendingReplications;参见Replication(复制) |
nnrmthread | NamenodeResourceMonitor线程,每5秒运行一次,检查磁盘空间不足的情况下使NN进入safemode;参见NameNodeResourceMonitor |
pendingReplications.timerThread | PendingReplicationBlocks线程,每5分钟将pendingReplications中的超时操作移到timedOutItems,见Replication(复制) |
dnthread | DecommissionManager线程,默认每30秒最多检查5个节点的Decommission状态;参见Decommission(退役) |
httpServer |
相关文章推荐
- 第117讲:Hadoop集群之安装IP配置、Slaves、namenode和secondarynamenode的配置学习笔记
- hadoop学习笔记之二:安装伪分布式
- 第125讲:Hadoop集群管理之SecondaryNamenode目录元数据结构详解及其内幕机制学习笔记
- hadoop学习笔记之二:分布式系统中的CAP理论
- 第118讲:Hadoop内存需求量及Namenode内存使用详解学习笔记
- Hadoop学习笔记之二:HDFS体系架构
- hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览
- Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构
- hadoop学习笔记--NameNode和DataNode以及容错处理
- hadoop学习笔记之start-all.sh 无法启动NameNode,DataNode
- Hadoop学习笔记:无法启动NameNode以及免密码启动hadoop
- Hadoop学习笔记14:./bin/hadoop namenode -format之源码解析
- Hadoop学习笔记_安装篇之二:HIVE安装
- hadoop学习笔记之二:MapReduce基本编程
- 【hadoop学习笔记】4.eclipse运行wordcount实例
- Hadoop学习笔记(4)hadoop集群模式安装
- Hadoop学习笔记一 简要介绍
- 编码知识学习笔记之二
- Hadoop学习笔记(二):MapReduce的特性-计数器、排序
- Hadoop学习笔记—5.自定义类型处理手机上网日志