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. 系统架构:

193178721

对各节点进行说明:

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上的日志。

流程图

278848074

1. 用户操作:

    对HDFS的操作,包括对数据的操作。

2. PrimaryNameNode将日志写入日志文件:

    每一个用户操作都会被分解为多条日志,并写入到日志文件中。

3. StandbyNameNode读取PrimaryNameNode日志,更新内存的命名空间:

    StandbyNameNode节点上有一个Ingest线程,默认每3秒读取一次NFS上PrimaryNameNode的日志文件。保持其与PrimaryNameNode的元数据保持一致。

相关源码: org.apache.hadoop.hdfs.server.namenode.Ingest.java

4. 切换故障过程

 

279983418

当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
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐