[hadoop云计算实战]hadoop的Avatar机制
Hadoop云计算实战读书笔记:第3章,p87~p991. 简介: Avatar机制是FaceBook提供的一个应用在Hadoop上的补丁程序,是作为NameNode解决故障的方案。 打过补丁后,Hadoop目录$HADOOP_HOME/src/contrib下面会出现一个highavailability包,其中主要有继承于NameNode,Data
Hadoop云计算实战读书笔记:第3章,p87~p99
1. 简介:
Avatar机制是FaceBook提供的一个应用在Hadoop上的补丁程序,是作为NameNode解决故障的方案。
打过补丁后,Hadoop目录$HADOOP_HOME/src/contrib下面会出现一个highavailability包,其中主要有继承于NameNode,DataNode等主要类的子类AvatarNode,AvatarDataNode,并提供了Standby,Ingest等实用化的线程类。该机制主要提供了一个StandbyNameNode节点作为热备,原NameNode在这套机制中被PrimaryNameNode替代,负责对外提供服务。
这2个NameNode节点的元数据会保持一致,在PrimaryNameNode宕机时,StandbyNameNode切换为PrimaryNameNode的时间很短。(20秒到1分左右)
2. 系统架构:
对各节点进行说明:
1. PrimaryNameNode:以primary方式启动的NameNode,作为主NameNode节点接受用户请求。AvatarNode0为主机名。
2. StandbyNameNode:以standby方式启动的NameNode,它是一个处于安全模式的NameNode节点,其定期读取PrimaryNameNode存储在NFS上的日志来更新自己内存中的元数据,并定期做checkpoint,更新PrimaryNameNode,StandbyNameNode上的映像及PrimaryNameNode的日志文件。AvatarNode1为主机名.
在Avatar机制中,NameNode被AvatarNode替代,AvatarNode是NameNode的子类。在PrimaryNameNode和StandbyNameNode节点上可以看到,运行的进程不再是NameNode而是AvatarNode.
3. AvatarDataNode:此节点存储数据块,并向PrimaryNameNode和StandbyNameNode同时发送心跳信息和BlockReport,其中包括Block的位置信息。
4. NFS服务器 : 存储PrimaryNameNode和StandbyNameNode的映像和日志。PrimaryNameNode将用户操作日志写入NFS上的日志文件,StandbyNameNode读取此文件,更新内存中的元数据,并定时做CheckPoint,将映像和日志回写到NFS服务器。
5. 客户端:此节点向PrimaryNameNode提出数据和元数据的读写请求。
3. 元数据同步机制
StandbyNameNode通过读取NFS上的PrimaryNameNode日志以保持元数据的同步。
StandbyNameNode启动会有2个线程,一个Standby,一个Ingest。Standby定期做checkpoint,而Ingest则是周期性读取PrimaryNameNode在NFS上的日志。
流程图
1. 用户操作:
对HDFS的操作,包括对数据的操作。
2. PrimaryNameNode将日志写入日志文件:
每一个用户操作都会被分解为多条日志,并写入到日志文件中。
3. StandbyNameNode读取PrimaryNameNode日志,更新内存的命名空间:
StandbyNameNode节点上有一个Ingest线程,默认每3秒读取一次NFS上PrimaryNameNode的日志文件。保持其与PrimaryNameNode的元数据保持一致。
相关源码: org.apache.hadoop.hdfs.server.namenode.Ingest.java
4. 切换故障过程
当PrimaryNameNode或StandbyNameNode宕机时的处理流程。
相关源码: org.apache.hadoop.hdfs.server.namenode.AvatarNode.java
5. 运行流程
(1). AvatarNode0节点以PrimaryNameNode启动
- a. 启动,将映像文件加载到内存,日志文件也会加载到内存的命名空间中
- b. 磁盘映像会被更新,后面会等待用户请求和DataNode的心跳信息
(2). AvatarNode1节点以StandbyNameNode启动
- a. 启动参数 -sync
- b. AvatarNode1也会将磁盘上的映像文件加载到内存,日志文件也会加载到内存的命名空间中
- c. 启动后,AvatarNode1会马上做一次CheckPoint
- d. Ingest线程定期从NFS的shared0目录读取AvatarNode0的日志
- e. 等待ND的心跳
(3). DataNode启动
- a. 向Primary,Standby发生心跳信息和存储在DataNode上的数据块信息
- b. AvatarNode0与AvatarNode1收到DataNode的心跳信息,构建数据块与存储数据块的DataNode之间的映射。
(4). AvatarNode0宕机
(5). AvatarNode1节点切换为StandbyNameNode
- a. 管理员手工执行命令
- b. Ingest线程最后一次从NFS中的AvatarNode0对应日志中读取AvatarNode0的日志
- c. 结束Ingest线程,结束Standby线程
- d. AvatarNode1可以接受用户操作并写入日志
(6). AvatarNode0节点以Standby重启或其他备用机器以Standby重启
- a. AvatarNode0以StandbyNameNode启动(-sync)
- b. 接收心跳信息
- c. 周期性从NFS中的AvatarNode0对应日志中读取AvatarNode0的日志
- d. 周期做CheckPoint
6. 切换故障流程
- (1). 集群正常运行状态
- (2). 运行PrimaryNameNode的节点宕机
- (3). 将StandbyNameNode切换为PrimaryNameNode
- (4). 将新节点作为StandbyNameNode
更多推荐
所有评论(0)