[譯]HDFS 滾動升級和降級

原文

介紹

HDFS滾動升級可以升級單獨的HDFS守護進程. 例如, datanode們可以獨立于namenode來升級. 一個namenode也可以獨立于其他的namenode們來升級. namenode們也可以獨立于datanode們和journal node們升級.

升級

在Hadoop版本2中, HDFS支持高可用(HA)namenode服務(wù)并結(jié)合兼容性. 這兩項能力使其可以在避免停機時間的情況升級HDFS. 要無停機地升級一個HDFS集群, 這個集群就必須是配置為高可用的.

如果升級后, 在新版中有任何在舊版本中不能使用的新特性, 那么這次升級就必須按以下步驟進行:

  1. 關(guān)閉新特性
  2. 升級集群
  3. 開啟新特性
    請注意, 滾動升級是在Hadoop 2.4版本開始支持的.

無停機升級

在一個高可用集群中, 有至少2個namenodes(NNS), 多個datanodes(DNs), 少數(shù)JournalNodes(JNs)和少數(shù)Zookeeper節(jié)點(ZKNs). JNs相當穩(wěn)定,在多數(shù)情況下, 升級HDFS時不需要升級. 在本文描述的滾動升級中, 只考慮升級NNs(namenodes)和DNs(datanodes), 但是JNs和ZKNs不考慮. 升級JNs和ZKNs可能會導(dǎo)致集群停機.(按: Zookeeper其實也可以進行滾動升級)

升級非聯(lián)邦集群

假設(shè)集群有兩個namenodes: NN1和NN2, 各種處于活動和待機狀態(tài). 按以下步驟進行高可用集群升級:

  1. 準備滾動升級
    1.1. 執(zhí)行"hdfs dfsadmin rollingUpgrade prepare"以生成一個文件系統(tǒng)鏡像以供回滾.
    1.2. 執(zhí)行"hdfs dfsadmin -rollingUpgrade query
    "來檢查回滾鏡像的狀態(tài). 來回執(zhí)行并等待, 直到顯示消息"Proceed with rolling upgrade".

  2. 升級活動和待機NNs
    2.1. 關(guān)閉并升級NN2 (待機節(jié)點)
    2.2. 用"-rollingUpgrade started
    "選項, 啟動NN2到待機狀態(tài).
    2.3. 從NN1(活動)切換NN2(待機), NN2成為活動節(jié)點, NN1變成待機節(jié)點.
    2.4. 關(guān)閉并重啟NN1
    2.5. 用"-rollingUpgrade started
    "選項, 啟動NN1到待機狀態(tài).

  3. 升級DNs
    3.1. 選擇一小部分datanodes(例如, 某個機架上的所有datanodes).
    3.1.1 執(zhí)行"hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
    "來關(guān)閉其中某一個指定的datanodes.
    3.1.2 執(zhí)行 "hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
    " 來檢查并等待datanode關(guān)閉.
    3.1.4. 同時對所有要操作所有datanode執(zhí)行以上操作.
    3.2 反復(fù)執(zhí)行上述步驟直到集群中所有的datanode都被升級.

  4. 結(jié)束滾動升級
    4.1. 執(zhí)行"hdfs dfsadmin -rollingUpgrade finalize
    "來結(jié)束滾動升級.

升級聯(lián)盟集群

在一個聯(lián)盟集群中, 有多個命名空間, 每個命名空間都有各自的活動和待機NNs. 升級一個聯(lián)盟集群的過程類似于升級非聯(lián)盟集群, 區(qū)別在于第一步和第四步在每一個命名空間上都執(zhí)行, 而第二步在每一對活動和待機namenodes上執(zhí)行. 例如:

  1. 為每個命名空間準備滾動升級
  2. 升級各個命名空間的活動和待機namenodes
  3. 升級datanodes
  4. 結(jié)束各個命名空間的升級

停機并升級

對于非高可用的集群, 是不可能升級HDFS且避免停機, 因為要重啟namenodes. 不過, datanodes還是可以滾動升級的.

升級非高可用集群

在一個非高可用集群中, 有一個Namenode(NN),一個SecondaryNameNode(SNN)和多個datanodes(DNs). 升級一個非高可用集群的過程類似于升級一個高可用集群, 除了第二步"升級活動和待機節(jié)點"要改成以下步驟:

  1. 升級namenode和secondary namenode
    1.1 關(guān)閉Secondary namenode
    1.2 關(guān)閉并升級Namenode
    1.3 用"-rollingUpgrade started
    "選項啟動Namenode
    1.4 升級和啟動Secondary Namenode

降級和回滾

當升級的版本不是需要的版本,或者在某些不太可能的情況下, 升級失敗了(因為新版本中的某些bug), 管理員可以選擇降級HDFS到升級之前的版本, 或者回滾到升級前的版本和狀態(tài).

請注意, 降級可以用滾動方式進行, 但是回滾不行. 回滾時就要停機.

請注意, 降級和回滾只能在一個滾動升級開始后, 和升級終止之間進行. 一個升級過程可以被"結(jié)束", 降級或者回滾 其中之一操作終止. 所以, 結(jié)束升級,或者降級之后,或無法回滾, 或者結(jié)束后無法降級.

降級

降級把系統(tǒng)恢復(fù)到升級前版本,且保持用戶數(shù)據(jù). 假設(shè)在時間點T, 滾動升級開始, 這個升級被降級所終止的話, 在時間點T之前或者之后創(chuàng)建的文件都保持在HDFS上, 在時間點T之前或之后刪除的文件也是在HDFS里被刪除的.

在新版本和舊版本之間, 只有當兩邊的namenode版本和datanode版本還沒在這兩個版本之間改變時, 新版本才能降級到舊版本.(不清楚, 請賜教,謝謝. A newer release is downgradable to the pre-upgrade release only if both the namenode layout version and the datanode layout version are not changed between these two releases.)

在一個高可用集群, 當滾動升級從舊版本到新版本在進行中時, 是可以滾動方式降級的, 升級的機器回到舊版本. 同前例, 假設(shè)NN1和NN2各自在活動和待機狀態(tài). 以下是無停機滾動降級的步驟:

  1. 降級Datanodes
    1.1 選擇一小部分datanodes(例如, 某個機架上的所有datanodes).
    1.1.1. 執(zhí)行"hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade" 來關(guān)閉其中某個datanode.
    1.1.2. 執(zhí)行"hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
    " 來檢查并等待datanode關(guān)閉.
    1.1.3. 降級并重新啟動datanode
    1.1.4. 對所有選擇的datanode同時執(zhí)行上述操作.
    1.2 對所有已經(jīng)升級的datanode同時執(zhí)行上述操作, 直到集群中所有datanode都被降級.

  2. 降級活動和待機的namenodes
    2.1. 關(guān)閉和降級待機的NN2
    2.2. 正常重啟NN2到待機狀態(tài)
    2.3. 從活動的NN1切換到待機NN2上, NN2變成活動狀態(tài), NN1變成待機狀態(tài).
    2.4. 關(guān)閉和降級NN1
    2.5. 重啟NN1到待機狀態(tài)

  3. 結(jié)束滾動降級
    3.1 執(zhí)行"hdfs dfsadmin -rollingUpgrade finalize
    "來結(jié)束滾動降級.

請注意, datanodes必須在namenode降級之前降級, 因為通訊協(xié)議是向下兼容的而不是向上兼容的. 例如老版本的datanode可以和新版本的namenode通訊,但是新版本的datanode未必能和老版本的namenode通訊.

回滾

回滾把系統(tǒng)恢復(fù)到升級前版本, 還把用戶的數(shù)據(jù)恢復(fù)到升級前狀態(tài). 假設(shè)在時間點T, 滾動升級開始, 這個升級被回滾所終止的話, 在時間點T之前創(chuàng)建的文件都保持在HDFS上, 時間點T之后創(chuàng)建的文件就不存在了. 在時間點T之前的文件在HDFS里被刪除的, 在時間點T之后刪除的文件就被恢復(fù)了.

從新版本回滾到舊版本是一直支持的. 但是, 回滾操作不能滾動執(zhí)行. 這需要停機時間. 設(shè)NN1和NN2分別處于活動和待機狀態(tài). 以下是回滾步驟:

  1. 回滾HDFS
    1.1. 關(guān)閉所有namenodes和datanodes
    1.2. 在所有機器上恢復(fù)到舊版本
    1.3. 用"-rollingUpgrade rollback
    "選項吧NN1啟動為活動狀態(tài).
    1.4. 用"-bootstrapStandby"選項執(zhí)行NN2,并啟動為待機狀態(tài).
    1.5. 以"-rollback"選項啟動DNs

滾動升級用到的命令和啟動選項

DFSAdmin 命令

hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>

執(zhí)行一個滾動升級操作

選項 說明
query 查詢當前滾動升級狀態(tài)
prepare 準備一個新的滾動升級
finalize 結(jié)束當前滾動升級

dfsadmin -getDatanodeInfo

hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
獲取指定datanode的信息, 這個命令就像unix的ping命令,可以檢查一個datanode是否還活著

dfsadmin -shutdownDatanode

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

提交一個關(guān)閉請求到指定的datanode. 如果upgrade選項指定了, 訪問這個datanode的客戶端都會被指示要等這個datanode重啟, 同時快速啟動模式也要被激活. 當重啟不夠及時, 客戶端就超市,并忽略這個datanode. 在這種情況下, 快速啟動模式就被關(guān)閉.

請注意, 這個命令并不會等到datanode完全關(guān)閉. "hdfs dfsadmin -getDatanodeInfo"命令可以檢查datanode是否被完成了關(guān)閉.

Namenode 啟動選項

namenode -rollingUpgrade

hdfs namenode -rollingUpgrade <rollback|started>

當一個滾動升級在進行中, -rollingUpgrade 啟動選項可以指定不同滾動升級行為

選項 說明
rollback 恢復(fù)namenode回到升級前的版本,同時回滾用戶數(shù)據(jù)到升級前狀態(tài)
started 指定已啟動一個滾動升級, namenode啟動時可以允許鏡像目錄喲不同的layout版本
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市最仑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌审丘,老刑警劉巖葱峡,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勘天,死亡現(xiàn)場離奇詭異,居然都是意外死亡右蕊,警方通過查閱死者的電腦和手機琼稻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尤泽,“玉大人欣簇,你說我怎么就攤上這事规脸∨髟迹” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵莫鸭,是天一觀的道長闹丐。 經(jīng)常有香客問我,道長被因,這世上最難降的妖魔是什么卿拴? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮梨与,結(jié)果婚禮上堕花,老公的妹妹穿的比我還像新娘。我一直安慰自己粥鞋,他們只是感情好缘挽,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呻粹,像睡著了一般壕曼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上等浊,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天腮郊,我揣著相機與錄音,去河邊找鬼筹燕。 笑死轧飞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的撒踪。 我是一名探鬼主播踪少,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼糠涛!你這毒婦竟也來了援奢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忍捡,失蹤者是張志新(化名)和其女友劉穎集漾,沒想到半個月后切黔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡具篇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年纬霞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驱显。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡诗芜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出埃疫,到底是詐尸還是另有隱情伏恐,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布栓霜,位于F島的核電站翠桦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胳蛮。R本人自食惡果不足惜销凑,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仅炊。 院中可真熱鬧斗幼,春花似錦、人聲如沸抚垄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽督勺。三九已至渠羞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間智哀,已是汗流浹背次询。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓷叫,地道東北人屯吊。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像摹菠,于是被迫代替她去往敵國和親盒卸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言 本篇文章翻譯了Hadoop系列下的HDFS Architecture次氨,原文最初經(jīng)過筆者翻譯后大概有600...
    time刺痛你的眼閱讀 967評論 0 4
  • 認識HDFS HDFS的特點: 高容錯性高吞吐量故障的檢測和自動快速恢復(fù)流式的數(shù)據(jù)訪問大數(shù)據(jù)集一次寫入,多次讀寫 ...
    Bloo_m閱讀 3,262評論 6 8
  • 首先蔽介,我們在使用前先看看HDFS是什麼?這將有助于我們是以后的運維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,196評論 0 2
  • Hadoop部署方式 本地模式 偽分布模式(在一臺機器中模擬虹蓄,讓所有進程在一臺機器上運行) 集群模式 服務(wù)器只是一...
    陳半仙兒閱讀 1,613評論 0 9
  • 也許這就是人生吧 總要學會面對 需要接受現(xiàn)實 要在跌倒后自己爬起來 要在聽到嘲諷聲后 若無無其事的走過 要學會忍耐...
    z6ting丫頭閱讀 340評論 0 0