HDFS滚动升级

1.说明

HDFS滚动升级允许独立的升级单个HDFS守护进程。比如说:datanodes可以独立于namenodes单独升级,一个namenode可以独立于其它的namenodes单独升级,namenodes可以独立于datanodes和journal nodes单独升级。

2.升级

在hadoop v2中,HDFS支持高可用的namenodes提供服务和线性的兼容。这两个功能使得升级HDFS而不用停机成为可能,为了在不停机的情况下升级HDFS集群,集群必须是HA方式。

如果一个特性在新版本的软件可以使用,但是在升级后导致老版本的软件不可用,在这种情况下升级需要下面的步骤:

1.禁用新特性

2.升级集群

3.开启新特性

注意:滚动升级从Hadoop-2.4.0才开始支持的。

3.不停机升级

在HA集群中,会有两个及以上的NameNodes(NNs)、许多DataNodes(DNs)、少量的JournalNodes(JNs)和少量的ZookeeperNodes(ZKNs),JNs是比较稳定的,在大多数情况下升级HDFS集群是不需要升级它的;在这里描述的滚动升级的过程中只有NNs和DNs被考虑进去了,JNs和ZKNs不考虑。升级JNs和ZKNs可能需要集群停机。

3.1.升级非联邦集群

假设有两个NameNode为NN1和NN2,其中NN1处于Active状态,NN2处于Standby状态,下面的步骤是升级一个HA集群:

3.1.1.准备升级

1)运行命令 “hdfs dfsadmin -rollingUpgrade prepare”创建一个rollback的fsimage。

①命令执行完成之后在主从的hdfs的fsimage目录中都会产生类似如下的文件,从节点的会延迟一会。

fsimage_rollback_0000000000000026420

fsimage_rollback_0000000000000026420.md5

②在DataNode存放数据的位置的每一个NameSpace对应的文件夹中都会包含一个名称叫做 RollingUpgradeInProgress 的空文件。

③在主从的NameNode上都能看到如下的标识


2)运行命令 “hdfs dfsadmin -rollingUpgrade query”用于检测rollback image的状态,等待或者重新运行命令直到看到“Proceed with rolling upgrade”这个消息的出现。

3.1.2.升级Active和Standby NNs

1)停止升级NN2

2)使用命令“hadoop-daemon.sh start namenode -rollingUpgrade started”启动NN2作为Standby状态的NN

3)切换NN的主从,将NN1切换为Standby状态,NN2切换为Active状态

4)停止并升级NN1

5)使用命令“hadoop-daemon.sh start namenode -rollingUpgrade started”启动NN1作为Standby状态的NN

3.1.3.升级DNs

1)选择一小部分DataNodes(比如:在某个特定机架下的所有的DataNodes)

a)运行命令“hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade”停止选择的DataNodes

b)运行命令 “hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>”检测并等待DataNodes停止

c)升级并重启DataNodes(此处的升级不需要特殊的操作,直接重启即可,DataNode在重启后会自动判断进入升级模式,创建previous目录保留历史数据)

d)对于选择的DataNodes并行的执行上面的操作

2)重复上面的操作,把集群中的所有的DataNodes都升级了。

3.1.4.固化滚动升级

1)运行命令 “hdfs dfsadmin -rollingUpgrade finalize”固化集群的滚动升级

3.2.升级联邦集群

对于Federation的集群,会有多个NameSpace,每个NameSpace都会有一对Active和Standby的NameNode,升级Federation的集群的过程和升级非Federation的集群的过程很相似,不同之处是步骤1和步骤4需要在每个NameSpace上执行,步骤2需要在每对Active和Standby的NNs上都执行。也就是:

1)为每个NameSpace准备滚动升级

2)为每个NameSpace升级每对Active和Standby的NN

3)升级DNs

4)为每个NameSpace固化滚动升级

4.停机升级

对于非HA集群,它是不能在不停机的情况下升级HDFS,因为它需要重启NameNode。然而,DataNodes仍然可以采用滚动升级的方式。

4.1.升级非HA集群

在非HA的集群,会有一个NameNode(NN)、一个SecondaryNameNode(SNN)和许多DataNodes(DNs),升级非HA的集群的过程和升级HA集群的过程很相似,除了步骤2“升级Active和Standby NNs”需要改成下面的方式:

升级NN和SNN

1)停止SNN

2)停止并升级NN

3)加上参数 “-rollingUpgrade started”启动NN

4)升级并重启SNN


5.降级和回滚

当已经升级的版本达不到预期,或者其它的类似的情况,升级失败(由于新版本中的bugs),管理员可能选择降级HDFS到升级前的版本,或者回滚HDFS到升级前的版本状态。

注意:降级可以使用滚动的方式完成,但是回滚不行,回滚需要集群停机才行。

还要注意:降级和回滚只有在滚动升级已经开始,但是升级没有终止之前才行。升级操作可以通过固化、降级、或者回滚来结束。因此,它不能在执行了固化或者降级之后进行回滚,或则固化之后执行降级。

5.1.降级

降级恢复软件到升级前的版本并保留用户数据,假设时间T是滚动升级开始时间,并且升级是通过降级的方式结束的,因此,在T时间之前或者之后创建的文件在HDFS中是有效的,在时间T之前或者之后删除的文件需要保持删除的状态。 

只能在新版本和升级前的版本的NameNode的布局版本和DataNode的布局版本没有改变的情况下,才能从新版本降级到升级前的版本,

在HA集群,当从老版本到新版本的滚动升级正在进行中,想要将已升级的机器返回到旧版本的软件,采用滚动的方式降级是可行的,和之前类似,假设NN1是Active状态的,NN2是Standby状态的,下面的步骤是不停机的情况下滚动降级:

5.1.1.降级DNs

1)选择一小部分DataNodes(比如:在某个特定机架下的所有的DataNodes)

a)运行命令“hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade”停止选择的DataNodes

b)运行命令 “hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>”检测并等待DataNodes停止

c)降级并重启DataNodes

d)对于选择的DataNodes并行的执行上面的操作

2)重复上面的操作,把集群中的所有的DataNodes都降级了。

5.1.2.降级Active和Standby的NNs

1)停止并降级NN2

2)正常启动NN2作为Standby

3)切换NN的主从,让NN2变为Active状态的,NN1变为Standby状态的

4)停止并降级NN1

5)正常启动NN1作为Standby的

5.1.3.固化滚动降级

1)运行命令 “hdfs dfsadmin -rollingUpgrade finalize”固化滚动降级

注意:在降级NameNode之前必须要先降级DataNodes,因为协议可以向后兼容,但是不能向前兼容,也就是老版本的DataNodes可以和新版本的NameNode通信,但是反之不行。

5.2.回滚

回滚恢复软件到升级前的版本但是用户数据也会被返回到升级前的状态。假设时间T是滚动升级开始时间,升级是通过回滚的方式结束,在时间T之前创建的文件在HDFS中是有效的,但是在时间T之后创建的会失效,在时间T之前删除的文件在HDFS中会保留删除的状态,但是在时间T之后删除的文件会被恢复。

从新版本回滚到升级前的版本通常是支持的。然而,它不能以滚动的方式完成,它需要集群停机。假设NN1是Active状态的,NN2是Standby状态的,下面是回滚的步骤:

回滚HDFS:

1)停止所有的NNs和DNs

2)在所有的机器上恢复升级前的版本

3)加上参数 “-rollingUpgrade rollback”启动NN1作为Active的NN

4)在NN2上执行同步操作 `-bootstrapStandby’,之后启动NN2作为Standby状态的NN

5)加上参数“-rollback”启动DNs(可以使用命令 start-dfs.sh -rollback启动DNs)

6.滚动升级启动选项的命令

6.1.DFSAdmin命令

6.1.1.dfsadmin -rollingUpgrade

hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>

执行滚动升级的动作.

选项:

query :查询当前滚动升级的状态

prepare :准备新的滚动升级

finalize :固化当前的滚动升级

6.1.2.dfsadmin -getDatanodeInfo

hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>

获取指定DataNode的信息,这个命令用于检测指定的DataNode是否存活,和linux的ping命令类似。

6.1.3.dfsadmin -shutdownDatanode

hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]

提交一个停止datanode的请求,如果指定了可选的升级参数参数 upgrade ,将会建议访问DataNode的客户端等待重启,并且启用快速重启模式。当没有及时重启时,客户端将会超时,并且忽略这个DataNode,在这种情况下,快速重启模式也会被禁用。

注意:这个命令不会等待DataNode关闭完成,命令 “dfsadmin -getDatanodeInfo”被用来检测DataNode关闭是否完成。

6.2. NameNode启动选项

6.2.1.namenode -rollingUpgrade

hdfs namenode -rollingUpgrade <rollback|started>

当滚动升级正在进行中,参数-rollingUpgrade 是NameNode用于指定各种滚动升级的启动选项

选项:

rollback :恢复NameNode到升级前的版本,同样也会将用户的数据回滚到升级前的状态。

started :指示滚动升级已经开始,这样的话在启动NameNode时,允许image目录有不同的布局版本号。

警告:downgrade选项已经过时,启动NameNode是不需要明确的指定downgrade选项的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容