一、简介
DFSZKFailoverController是Hadoop-2.7.0中HDFS NameNode HA实现的中心组件,它负责整体的故障转移控制等。它是一个守护进程,通过main()方法启动,继承自ZKFailoverController。
二、实现流程
1、启动
通过main()方法启动,如下:
/**
* 进程启动的main()方法
*/
public static void main(String args[])
throws Exception {
// 解析参数
if (DFSUtil.parseHelpArgument(args,
ZKFailoverController.USAGE, System.out, true)) {
System.exit(0);
}
GenericOptionsParser parser = new GenericOptionsParser(
new HdfsConfiguration(), args);
// 通过静态方法创建DFSZKFailoverController实例zkfc
DFSZKFailoverController zkfc = DFSZKFailoverController.create(
parser.getConfiguration());
int retCode = 0;
try {
// 调用zkfc的run()方法,执行主业务逻辑
retCode = zkfc.run(parser.getRemainingArgs());
} catch (Throwable t) {
LOG.fatal("Got a fatal error, exiting now", t);
}
System.exit(retCode);
}
解析参数,然后通过静态方法构造一个zkfc实例,调用zkfc的run()方法,执行主业务逻辑。
2、实例化
实例化是在静态方法create中完成的,如下:
/**
* 对象实例化用的静态方法
*/
public static DFSZKFailoverController create(Configuration conf) {
// 获取本地NameNode配置信息
Configuration localNNConf = DFSHAAdmin.addSecurityConfiguration(conf);
// 获取该NameNode的命名服务ID:NamenodeName