1.說(shuō)明
HDFS滾動(dòng)升級(jí)允許獨(dú)立的升級(jí)單個(gè)HDFS守護(hù)進(jìn)程。比如說(shuō):datanodes可以獨(dú)立于namenodes單獨(dú)升級(jí),一個(gè)namenode可以獨(dú)立于其它的namenodes單獨(dú)升級(jí)斑芜,namenodes可以獨(dú)立于datanodes和journal nodes單獨(dú)升級(jí)短纵。
2.升級(jí)
在hadoop v2中婶恼,HDFS支持高可用的namenodes提供服務(wù)和線性的兼容。這兩個(gè)功能使得升級(jí)HDFS而不用停機(jī)成為可能唆樊,為了在不停機(jī)的情況下升級(jí)HDFS集群,集群必須是HA方式刻蟹。
如果一個(gè)特性在新版本的軟件可以使用逗旁,但是在升級(jí)后導(dǎo)致老版本的軟件不可用,在這種情況下升級(jí)需要下面的步驟:
1.禁用新特性
2.升級(jí)集群
3.開(kāi)啟新特性
注意:滾動(dòng)升級(jí)從Hadoop-2.4.0才開(kāi)始支持的。
3.不停機(jī)升級(jí)
在HA集群中片效,會(huì)有兩個(gè)及以上的NameNodes(NNs)红伦、許多DataNodes(DNs)、少量的JournalNodes(JNs)和少量的ZookeeperNodes(ZKNs)淀衣,JNs是比較穩(wěn)定的昙读,在大多數(shù)情況下升級(jí)HDFS集群是不需要升級(jí)它的;在這里描述的滾動(dòng)升級(jí)的過(guò)程中只有NNs和DNs被考慮進(jìn)去了膨桥,JNs和ZKNs不考慮蛮浑。升級(jí)JNs和ZKNs可能需要集群停機(jī)。
3.1.升級(jí)非聯(lián)邦集群
假設(shè)有兩個(gè)NameNode為NN1和NN2只嚣,其中NN1處于Active狀態(tài)沮稚,NN2處于Standby狀態(tài),下面的步驟是升級(jí)一個(gè)HA集群:
3.1.1.準(zhǔn)備升級(jí)
1)運(yùn)行命令?“hdfs dfsadmin -rollingUpgrade prepare”創(chuàng)建一個(gè)rollback的fsimage册舞。
①命令執(zhí)行完成之后在主從的hdfs的fsimage目錄中都會(huì)產(chǎn)生類似如下的文件蕴掏,從節(jié)點(diǎn)的會(huì)延遲一會(huì)。
fsimage_rollback_0000000000000026420
fsimage_rollback_0000000000000026420.md5
②在DataNode存放數(shù)據(jù)的位置的每一個(gè)NameSpace對(duì)應(yīng)的文件夾中都會(huì)包含一個(gè)名稱叫做 RollingUpgradeInProgress 的空文件调鲸。
③在主從的NameNode上都能看到如下的標(biāo)識(shí)
2)運(yùn)行命令 “hdfs dfsadmin -rollingUpgrade query”用于檢測(cè)rollback image的狀態(tài)囚似,等待或者重新運(yùn)行命令直到看到“Proceed with rolling upgrade”這個(gè)消息的出現(xiàn)。
3.1.2.升級(jí)Active和Standby NNs
1)停止升級(jí)NN2
2)使用命令“hadoop-daemon.sh start namenode -rollingUpgrade started”啟動(dòng)NN2作為Standby狀態(tài)的NN
3)切換NN的主從线得,將NN1切換為Standby狀態(tài)饶唤,NN2切換為Active狀態(tài)
4)停止并升級(jí)NN1
5)使用命令“hadoop-daemon.sh start namenode -rollingUpgrade started”啟動(dòng)NN1作為Standby狀態(tài)的NN
3.1.3.升級(jí)DNs
1)選擇一小部分DataNodes(比如:在某個(gè)特定機(jī)架下的所有的DataNodes)
a)運(yùn)行命令“hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade”停止選擇的DataNodes
b)運(yùn)行命令 “hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>”檢測(cè)并等待DataNodes停止
c)升級(jí)并重啟DataNodes(此處的升級(jí)不需要特殊的操作,直接重啟即可贯钩,DataNode在重啟后會(huì)自動(dòng)判斷進(jìn)入升級(jí)模式募狂,創(chuàng)建previous目錄保留歷史數(shù)據(jù))
d)對(duì)于選擇的DataNodes并行的執(zhí)行上面的操作
2)重復(fù)上面的操作,把集群中的所有的DataNodes都升級(jí)了角雷。
3.1.4.固化滾動(dòng)升級(jí)
1)運(yùn)行命令 “hdfs dfsadmin -rollingUpgrade finalize”固化集群的滾動(dòng)升級(jí)
3.2.升級(jí)聯(lián)邦集群
對(duì)于Federation的集群祸穷,會(huì)有多個(gè)NameSpace,每個(gè)NameSpace都會(huì)有一對(duì)Active和Standby的NameNode勺三,升級(jí)Federation的集群的過(guò)程和升級(jí)非Federation的集群的過(guò)程很相似雷滚,不同之處是步驟1和步驟4需要在每個(gè)NameSpace上執(zhí)行,步驟2需要在每對(duì)Active和Standby的NNs上都執(zhí)行吗坚。也就是:
1)為每個(gè)NameSpace準(zhǔn)備滾動(dòng)升級(jí)
2)為每個(gè)NameSpace升級(jí)每對(duì)Active和Standby的NN
3)升級(jí)DNs
4)為每個(gè)NameSpace固化滾動(dòng)升級(jí)
4.停機(jī)升級(jí)
對(duì)于非HA集群祈远,它是不能在不停機(jī)的情況下升級(jí)HDFS,因?yàn)樗枰貑ameNode商源。然而车份,DataNodes仍然可以采用滾動(dòng)升級(jí)的方式。
4.1.升級(jí)非HA集群
在非HA的集群牡彻,會(huì)有一個(gè)NameNode(NN)扫沼、一個(gè)SecondaryNameNode(SNN)和許多DataNodes(DNs),升級(jí)非HA的集群的過(guò)程和升級(jí)HA集群的過(guò)程很相似,除了步驟2“升級(jí)Active和Standby NNs”需要改成下面的方式:
升級(jí)NN和SNN
1)停止SNN
2)停止并升級(jí)NN
3)加上參數(shù)?“-rollingUpgrade started”啟動(dòng)NN
4)升級(jí)并重啟SNN
5.降級(jí)和回滾
當(dāng)已經(jīng)升級(jí)的版本達(dá)不到預(yù)期缎除,或者其它的類似的情況严就,升級(jí)失敗(由于新版本中的bugs)器罐,管理員可能選擇降級(jí)HDFS到升級(jí)前的版本梢为,或者回滾HDFS到升級(jí)前的版本狀態(tài)。
注意:降級(jí)可以使用滾動(dòng)的方式完成技矮,但是回滾不行抖誉,回滾需要集群停機(jī)才行。
還要注意:降級(jí)和回滾只有在滾動(dòng)升級(jí)已經(jīng)開(kāi)始衰倦,但是升級(jí)沒(méi)有終止之前才行袒炉。升級(jí)操作可以通過(guò)固化、降級(jí)樊零、或者回滾來(lái)結(jié)束我磁。因此,它不能在執(zhí)行了固化或者降級(jí)之后進(jìn)行回滾驻襟,或則固化之后執(zhí)行降級(jí)夺艰。
5.1.降級(jí)
降級(jí)恢復(fù)軟件到升級(jí)前的版本并保留用戶數(shù)據(jù),假設(shè)時(shí)間T是滾動(dòng)升級(jí)開(kāi)始時(shí)間沉衣,并且升級(jí)是通過(guò)降級(jí)的方式結(jié)束的郁副,因此,在T時(shí)間之前或者之后創(chuàng)建的文件在HDFS中是有效的豌习,在時(shí)間T之前或者之后刪除的文件需要保持刪除的狀態(tài)存谎。?
只能在新版本和升級(jí)前的版本的NameNode的布局版本和DataNode的布局版本沒(méi)有改變的情況下,才能從新版本降級(jí)到升級(jí)前的版本肥隆,
在HA集群既荚,當(dāng)從老版本到新版本的滾動(dòng)升級(jí)正在進(jìn)行中,想要將已升級(jí)的機(jī)器返回到舊版本的軟件栋艳,采用滾動(dòng)的方式降級(jí)是可行的恰聘,和之前類似,假設(shè)NN1是Active狀態(tài)的吸占,NN2是Standby狀態(tài)的晴叨,下面的步驟是不停機(jī)的情況下滾動(dòng)降級(jí):
5.1.1.降級(jí)DNs
1)選擇一小部分DataNodes(比如:在某個(gè)特定機(jī)架下的所有的DataNodes)
a)運(yùn)行命令“hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade”停止選擇的DataNodes
b)運(yùn)行命令 “hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>”檢測(cè)并等待DataNodes停止
c)降級(jí)并重啟DataNodes
d)對(duì)于選擇的DataNodes并行的執(zhí)行上面的操作
2)重復(fù)上面的操作,把集群中的所有的DataNodes都降級(jí)了旬昭。
5.1.2.降級(jí)Active和Standby的NNs
1)停止并降級(jí)NN2
2)正常啟動(dòng)NN2作為Standby
3)切換NN的主從篙螟,讓NN2變?yōu)锳ctive狀態(tài)的,NN1變?yōu)镾tandby狀態(tài)的
4)停止并降級(jí)NN1
5)正常啟動(dòng)NN1作為Standby的
5.1.3.固化滾動(dòng)降級(jí)
1)運(yùn)行命令 “hdfs dfsadmin -rollingUpgrade finalize”固化滾動(dòng)降級(jí)
注意:在降級(jí)NameNode之前必須要先降級(jí)DataNodes问拘,因?yàn)閰f(xié)議可以向后兼容,但是不能向前兼容,也就是老版本的DataNodes可以和新版本的NameNode通信骤坐,但是反之不行绪杏。
5.2.回滾
回滾恢復(fù)軟件到升級(jí)前的版本但是用戶數(shù)據(jù)也會(huì)被返回到升級(jí)前的狀態(tài)。假設(shè)時(shí)間T是滾動(dòng)升級(jí)開(kāi)始時(shí)間纽绍,升級(jí)是通過(guò)回滾的方式結(jié)束蕾久,在時(shí)間T之前創(chuàng)建的文件在HDFS中是有效的,但是在時(shí)間T之后創(chuàng)建的會(huì)失效拌夏,在時(shí)間T之前刪除的文件在HDFS中會(huì)保留刪除的狀態(tài)僧著,但是在時(shí)間T之后刪除的文件會(huì)被恢復(fù)。
從新版本回滾到升級(jí)前的版本通常是支持的障簿。然而盹愚,它不能以滾動(dòng)的方式完成,它需要集群停機(jī)站故。假設(shè)NN1是Active狀態(tài)的皆怕,NN2是Standby狀態(tài)的,下面是回滾的步驟:
回滾HDFS:
1)停止所有的NNs和DNs
2)在所有的機(jī)器上恢復(fù)升級(jí)前的版本
3)加上參數(shù)?“-rollingUpgrade rollback”啟動(dòng)NN1作為Active的NN
4)在NN2上執(zhí)行同步操作 `-bootstrapStandby’西篓,之后啟動(dòng)NN2作為Standby狀態(tài)的NN
5)加上參數(shù)“-rollback”啟動(dòng)DNs(可以使用命令?start-dfs.sh -rollback啟動(dòng)DNs)
6.滾動(dòng)升級(jí)啟動(dòng)選項(xiàng)的命令
6.1.DFSAdmin命令
6.1.1.dfsadmin -rollingUpgrade
hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>
執(zhí)行滾動(dòng)升級(jí)的動(dòng)作.
選項(xiàng):
query :查詢當(dāng)前滾動(dòng)升級(jí)的狀態(tài)
prepare?:準(zhǔn)備新的滾動(dòng)升級(jí)
finalize?:固化當(dāng)前的滾動(dòng)升級(jí)
6.1.2.dfsadmin -getDatanodeInfo
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
獲取指定DataNode的信息愈腾,這個(gè)命令用于檢測(cè)指定的DataNode是否存活,和linux的ping命令類似岂津。
6.1.3.dfsadmin -shutdownDatanode
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]
提交一個(gè)停止datanode的請(qǐng)求虱黄,如果指定了可選的升級(jí)參數(shù)參數(shù) upgrade ,將會(huì)建議訪問(wèn)DataNode的客戶端等待重啟吮成,并且啟用快速重啟模式橱乱。當(dāng)沒(méi)有及時(shí)重啟時(shí),客戶端將會(huì)超時(shí)赁豆,并且忽略這個(gè)DataNode仅醇,在這種情況下,快速重啟模式也會(huì)被禁用魔种。
注意:這個(gè)命令不會(huì)等待DataNode關(guān)閉完成析二,命令 “dfsadmin -getDatanodeInfo”被用來(lái)檢測(cè)DataNode關(guān)閉是否完成。
6.2. NameNode啟動(dòng)選項(xiàng)
6.2.1.namenode -rollingUpgrade
hdfs namenode -rollingUpgrade <rollback|started>
當(dāng)滾動(dòng)升級(jí)正在進(jìn)行中节预,參數(shù)-rollingUpgrade 是NameNode用于指定各種滾動(dòng)升級(jí)的啟動(dòng)選項(xiàng)
選項(xiàng):
rollback?:恢復(fù)NameNode到升級(jí)前的版本叶摄,同樣也會(huì)將用戶的數(shù)據(jù)回滾到升級(jí)前的狀態(tài)。
started?:指示滾動(dòng)升級(jí)已經(jīng)開(kāi)始安拟,這樣的話在啟動(dòng)NameNode時(shí)蛤吓,允許image目錄有不同的布局版本號(hào)。
警告:downgrade選項(xiàng)已經(jīng)過(guò)時(shí)糠赦,啟動(dòng)NameNode是不需要明確的指定downgrade選項(xiàng)的会傲。