首家大数据培训挂牌机构 股票代码: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方案——运行机制分析(2)

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

分享到:


2. Handshake

Handshake的主要功能是在BackupNode上建立与NameNode的通信机制(创建RPC调用的Proxy),对BackupNode的信息和NameNode上的信息进行验证,只有验证通过了,程序才继续向下执行。

BackupNode通过NameNodeRPC调用,获取NameNodeNamespaceInfo信息,NamespaceInfo信息除了用于和BackupNode的自身信息进行验证、比较,同时还将作为后续函数的参数。

NamespaceInfo包括BuildVersionLayoutVersionHandshake主要验证的是NameNodeBackupNode双方的Build版本是否一致,也就是说这两个程序是否是一起构建出来的,以及各自Layout的版本是否一致。这是从大的方面对BackupNode进行验证,后面的步骤中,还要从其他的方面对BackupNode进行验证。

Handshake方法通过RPC调用NameNode的接口,获取NamespaceInfo,如果获取失败,将休眠一段时间后,重新获取,获取成功后在本地进行验证。

BackupNode.java

private NamespaceInfo handshake(Configuration conf) throws IOException {

// name node 建立连接,获得 name node RPC 调用 proxy

InetSocketAddress nnAddress = super.getRpcServerAddress(conf);

this.namenode = (NamenodeProtocol) RPC.waitForProxy(NamenodePro

tocol.class,

NamenodeProtocol.versionID, nnAddress, conf);

// 通过 RPC 调用从 name-node 获取 version id info

NamespaceInfo nsInfo = null;

while(!isStopRequested()) {

try {

nsInfo = handshake(namenode);

break;

} catch(SocketTimeoutException e) {

……

}

}

return nsInfo;

}

handshakeRPC调用NameNode中的versionRequest方法,获取

NamespaceInfo,对BuildVersionLayoutVersion进行验证。

BackupNode.java

private static NamespaceInfo handshake(NamenodeProtocol namenode)

throws IOException, SocketTimeoutException {

NamespaceInfo nsInfo;

nsInfo = namenode.versionRequest();

……

// 如果 build version 与本地的不一致,则抛出异常

if( ! nsInfo.getBuildVersion().equals( Storage.getBuildVersion())) {

……

throw new IOException(errorMsg);

}

// 如果 layout verison 不一致,则退出

assert FSConstants.LAYOUT_VERSION == nsInfo.getLayoutVersion() :

"Active and backup node layout versions must be the same. Expected: "

+ FSConstants.LAYOUT_VERSION + " actual "+

nsInfo.getLayoutVersion();

return nsInfo;

}

NameNode中的versionRequest方法。

NameNode.java

public NamespaceInfo versionRequest() throws IOException {

//调用 namesystem getNamespaceInfo 方法

//namesystem 是在创建 NameNode 时的 initialize 方法中创建的,

//是一个 FSNamesystem 类,具体创建函数是 loadNamesystem(conf)

return namesystem.getNamespaceInfo();

}

FSNamesystem中的getNamespaceInfo方法调用,返回NamespaceInfo:包括NamespaceIDCTime以及Version信息。CTime是指文件系统状态的创建时间,它在升级(upgrade)的时候被更新。

FSNameSystem.java

NamespaceInfo getNamespaceInfo() {

return new NamespaceInfo(dir.fsImage.getNamespaceID(),

dir.fsImage.getCTime(),

getDistributedUpgradeVersion());

}