前言
我们知道HDFS Rolling Upgrade功能在几年前比较早的时间早已实现,但是我们往往只注意怎么去做HDFS Rolling Upgrade这个事情本身,但是对于HDFS如何实现Rolling Upgrade这个功能可能了解的会比较少。本文笔者来聊聊其中部分要点的设计实现,为了做到Rolling Upgrade的快速和安全性,社区在这块实现上还是花了一些功夫的。本文主要基于HDFS Rolling Upgrade社区JIRA HDFS-5535:Umbrella jira for improved HDFS rolling upgrades来展开内容进行阐述。
HDFS NameNode端针对Rolling Upgrade的调整
HDFS针对Rolling Upgrade的实现,在NameNode和DataNode两边都进行了相关的调整实现。首先我们来看NameNode做了哪些模块的调整。
第一个,NameNode在pre-upgrade, upgrade in-progress, finalized, downgrade/rollback这些期间
元数据文件的一个状态处理,包括FsImage文件以及editlog文件。当我们执行Rolling Upgrade的rollback操作时,NN是可以支持撤销rolling upgrade时的那个transaction后发生的所有transaction。简单来说,它会忽略掉升级过程中执行过的那些事务transaction。
第二点,Layout的拆分,原有Layout一拆为二,分别有NameNode和DataNode各自对应的NamenodeLayoutVersion和DatanodeLayoutVersion。Layout内会分别记有NameNode,DataNode这边的当前版本所支持的各种feature或者标明目录结构版本的信息,相关JIRA HDFS-5754(Split LayoutVerion into NamenodeLayoutVersion and DatanodeLayoutVersion)
例如以下是NameNode NamenodeLayoutVersion和DataNode DatanodeLayoutVersion的内部信息:
public class NameNodeLayoutVersion {
...
public enum Feature implements LayoutFeature {
ROLLING_UPGRADE(-55, -53, -55, "Support rolling upgrade", false)