Hadoop云计算实战读书笔记:第3章,p87~p99
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分左右)
对各节点进行说明:
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提出数据和元数据的读写请求。
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
当PrimaryNameNode或StandbyNameNode宕机时的处理流程。
相关源码: org.apache.hadoop.hdfs.server.namenode.AvatarNode.java
(1). AvatarNode0节点以PrimaryNameNode启动
(2). AvatarNode1节点以StandbyNameNode启动
(3). DataNode启动
(4). AvatarNode0宕机
(5). AvatarNode1节点切换为StandbyNameNode
(6). AvatarNode0节点以Standby重启或其他备用机器以Standby重启