大数据培训新三板挂牌机构 股票代码:837906 | EN CN
异常解决方案—NameNode 宕机读写测试
异常解决方案—NameNode 宕机切换实验
异常解决方案—Data Node 配置
异常解决方案—Backup Node配置
异常解决方案—NameNode配置
异常解决方案—6.5.1异常情况分析
安装及配置
5NameNode安装及配置以及6BackupNode安装及配置
6.4.4虚拟机集群架设
6.4.3安装JDK
3.配置操作系统
2.创建虚拟机与安装操作系统
6.4构建实验环境
实验方案说明
故障切换机制
日志池(journal spool)机制
元数据操作情景分——BackupNode更新磁盘上的日志文件
元数据操作情景分——NameNode通过日志输出流......
元数据操作情景分——NameNode将日志写入日志文件
元数据操作情景分——NameNode更新内存镜像
元数据操作情景分——客户端执行命令流程
元数据操作情景分
Hadoop的Backup Node方案——运行机制分析(5)
Hadoop的Backup Node方案——运行机制分析(4)
Hadoop的Backup Node方案——运行机制分析(3)
Hadoop的Backup Node方案——运行机制分析(2)
Hadoop的Backup Node方案——运行机制分析(1)
Hadoop的Backup Node方案——系统架构
Hadoop的Backup Node方案—Backup Node 概述
元数据可靠性机制以及使用说明
Checkpoint 过程情景分析
元数据更新及日志写入情景分析
NameNode启动加载元数据情景分析
Hadoop的元数据备份机制的进行分析
元数据应用场景分析
Format情景分析
磁盘元数据文件
HDFS之代码分析——元数据结构
HDFS之内存元数据结构
什么是HDFS的元数据
Hadoop中DRDB方案和AvatarNode方案
Hadoop中常用各方案的对比
Hadoop的BackupNode方案
Hadoop的CheckpointNode方案
Hadoop的SecondaryNameNode方案
Hadoop的元数据备份方案
影响HDFS可用性的几个因素
什么是高可用性? 详细解析
HDFS系统架构简介
如何安装和配置Hadoop集群
如何在Windows下安装Hadoop
在MacOSX上安装与配置Hadoop
Linux下安装Hadoop的步骤
Hadoop的集群安全策略介绍
Hive的数据管理介绍
HBase的数据管理介绍
HDFS的数据管理介绍
Hadoop计算模型之 MapReduce 简介
Hadoop于分布式开发
Hadoop体系结构介绍
Hadoop的项目结构详解
一文读懂Hadoop

Hadoop的Backup Node方案——运行机制分析(1)

于2018-01-17由小牛君创建

分享到:


运行机制分析

由前面的论述可知,CheckpointNode的运行机制和SecondaryNode相似,SecondaryNode会定期地从NameNode下载镜像文件和日志,然后在内存中合并,产生新的镜像文件,并将其上传到NameNodeNameNode会将日志实时更新到dfs.namenode.name.dir配置的目录下。

对于第2阶段BackupNode而言,NameNode会将注册上来的BackupNode也视为一个存储对象,以同样的方式存储日志。下面我们将结合代码进行详细分析,不仅知其然,还要知其所以然。在论述的过程中,将采用情景分析的方式,选取一些重要场景,分析这些场景以及所涉及的代码。

6.2.1运行机制

BackupNode.java

BackupStorage.java

Checkpointer.java

CheckpointSignature.java

启动流程

NameNode.java

EditLogBackupInputStream.java

EditLogBackupOutputStream.java

……

BackupNode启动的流程如下:

1)创建初始化

2)握手(Handshake

3NameNode初始化

4)注册(Registration

5)启动后台线程,定期创建Checkpoint检查点

1.创建初始化

BackupNode主要由类BackupNode实现,BackupNodeNameNode的子类,BackupNode的启动和NameNode的启动是一个入口,Main函数会在启动的时候,根据输入的参数,决定创建哪个类,并传入不同的初始化参数。

BackupNode会在构造函数中进行初始化,初始化主要完成四个步骤,也就是我们后面描述的:握手、NameNode初始化、注册和启动Checkpoint后台线程。

下面我们来分析初始化具体代码。

Backup Node 的启动入口。

NameNode.java

public static void main(String argv[]) throws Exception {

try {

……

NameNode namenode = createNameNode(argv, null);

……

} catch (Throwable e) {

……

}

}

根据不同的输入参数创建不同的NameNode对象,由如下代码可知BACKUPCHECKPOINT的实现是同一个类BackupNode

NameNode.java

public static NameNode createNameNode(String argv[], Configuration conf)

throws IOException {

……

switch (startOpt) {

case FORMAT:

boolean aborted = format(conf, true);

System.exit(aborted ? 1 : 0);

return null; // avoid javac warning

case FINALIZE:

aborted = finalize(conf, true);

System.exit(aborted ? 1 : 0);

return null; // avoid javac warning

case BACKUP:

case CHECKPOINT:

return new BackupNode(conf, startOpt.toNodeRole());

default:

return new NameNode(conf);

}

}

BackupNode继承自NameNode

BackupNode.java

public class BackupNode extends NameNode {

……

}

BackupNode的构造函数,调用父类的构造方法。

BackupNode.java

BackupNode(Configuration conf, NamenodeRole role) throws IOException {

// 对于 Checkpoint Node Backup Node 分别传入不同的 role

super(conf, role);

}

父类NameNode的构造方法。

NameNode.java

protected NameNode(Configuration conf, NamenodeRole role)

throws IOException {

this.role = role;

try {

initialize(conf);

} catch (IOException e) {

……

}

}

BackupNode中重写(override)了父类NameNodeinitialize方法,initialize中执行四个重要步骤:

1)握手(handshake

2NameNode初始化

3)注册(registration

4)启动Checkpoint线程

NameNode.java

protected void initialize(Configuration conf) throws IOException {

……

NamespaceInfo nsInfo = handshake(conf);

super.initialize(conf);

……

registerWith(nsInfo);

runCheckpointDaemon(conf);

}