HDFS3.2升級在滴滴的實踐
桔妹導讀:Hadoop 3的第一個穩定版本在2017年底就已經發布了,有了很多重大的改進。在HDFS方面,支持了Erasure Coding、More than 2 NameNodes、Router-Based Federation、Intra-datanode balancer 等功能,大家可能對這些功能很感興趣,打算將叢集升級到HDFS 3.x 版本。本篇文章會介紹我們是如何將 HDFS 從2.7滾動升級到3.2版本的,在升級中會遇到哪些問題以及我們是如何解決掉的。HDFS 升級過程漫長,但是收益是非常多的。在此基礎上,我們可以繼續做非常有意義的工作,持續在穩定性、效能、成本等多個方面深入探索,使用技術為公司創造可見的價值。
1.為什麼要升級
2.調研升級方案
3.解決滾動升級中遇到的問題
滾動升級的操作流程在 Hadoop 官方升級文件中有介紹,概括起來大致步驟如下:
1.JournalNode 升級,使用新版本依次重啟 JournalNode
2. NameNode 升級
2.1升級準備,生成 fallback fsimage 檔案
2. 2使用新版本 Hadoop 重啟 Standby NameNode,重啟 ZKFC
2.3做 failover,使升級後的 NameNode 變成 Active 節點
2.4使用新版本 Hadoop 重啟另一個 NameNode,重啟 ZKFC
3.升級 DataNode,使用新版本 Hadoop 重啟所有 DataNode 節點
4.做 Finalize,確認叢集變更到3.2
在測試環境驗證 HDFS 滾動升級方案時,升級和降級過程中都遇到了一些問題。
在滾動升級中,當 Active NameNode 為3.2版本,Standby NameNode 為2.7版本時,會出現 EditLog 不相容問題。此時,Active NameNode 寫 EditLog 時會將 EC 相關的結構寫入到 EditLog 當中,當 Standby NameNode 讀取 EditLog 時,會出現識別不了的情況,導致 Standby NameNode 直接 Shutdown。我們的解決方案是,考慮當前有效版本是否支援 EC,如果支援 EC 則會寫入 EC 資訊到 EditLog,否則不會寫入。而在升級過程中,有效版本實際上還是2.7,是不支援 EC 的,這個時候忽略 EC 即可,這樣 Standby NameNode 讀取 EditLog 做合併時,不會出現 EC 相關資訊,可正常工作。解決問題的 ISSUE 為 HDFS-13596。
在滾動降級中,當3.2版本的 NameNode 使用3.2版本 Hadoop 重啟時,如果當前最新的 Fsimage 是3.2版本 NameNode 產生的,則2.7版本 Hadoop 重啟 NameNode 會直接 Shutdown,原因是,3.2版本 Haodop 產生的 Fsimage 檔案,2.7版本的 Hadoop 無法進行載入,這將導致如果升級中遇到問題想回滾的話,無法完成回滾操作。經過深入分析,我們發現有兩個問題會導致這種情況出現。
第一個問題,Fsimage 的不相容是由於3.2版本的 NameNode 將 EC 資訊寫入到了 Fsimage 當中,2.7版本的 Hadoop 無法識別 EC 資訊,導致失敗。解決方案與上面類似,在儲存 Fsimage 時考慮當前的有效版本,如果不支援 EC 則不會將 EC 資訊寫入到 Fsimage 檔案中。解決問題的 ISSUE 為 HDFS-14396。
第二個問題,由於 NameNode 對 StringTable 的修改導致了 Fsimage 的不相容,目前該問題可以透過回滾 commit 進行解決,社群反饋修復也不是很必要,可以透過先升級到無該 commit 的版本,滾動升級穩定後,直接進行小版本升級,跨過這個不相容特性。記錄 ISSUE 為 HDFS-14831。
由於滴滴使用的是內部的使用者名稱密碼認證機制,社群出現的一個問題我們沒有遇到, ISSUE 為 HDFS-14509 ,升級過程中 NameNode 和 DataNode 由於資料結構的變化,生成了不同的 password,導致無法認證,讀寫資料會失敗。該 ISSUE 記錄了這個問題,需要先升級到 2.x 的最新版本進行過度,之後才能滾動升級到 3.x 版本。
總結起來,需要做 HDFS2.x 到 3.x 的滾動升級,需要關注這些 ISSUE,HDFS-13596,HDFS-14396,HDFS-14831,HDFS-14509。
4.測試與上線
從19年初開始關注 HDFS 滾動升級,在解決遇到的已知問題之後,開發與測試不斷討論升級方案,將可能遇到的風險進行總結。
在這個過程中,我們詳細閱讀分析了滾動升級的原始碼,確定升級中 NameNode,DataNode 會做哪些動作,以明確風險點。同時我們還分析了從2.7到3.2版本引入的關於 HDFS 的4000左右的 Patch ,找出可能存在相容性問題的點,進行深入地分析。同時我們對3.2中新引入的 Feature 也進行了分析,以確保新功能對升級沒有影響。種種總結、分析、測試相關的工作,我們寫了四五十篇的 WIKI 文件進行記錄。在測試環境中升級步驟進行了數次演練,確認沒問題之後,我們開始了升級之路。相關的具體里程碑上線過程如下:
1.19年5月左右,升級演練多次,準備全量 Hadoop、Hive、Spark Case 進行測試,確定方案沒有問題
2.19年7月左右,離線小叢集1(百臺)升級到3.2版本,使用者未受到影響。
3.19年10月左右,離線小叢集2(數百臺)升級到3.2版本,使用者未受到影響。
4.19年11月底,離線大叢集(數千臺)升級到3.2版本,使用者未受到影響.
升級過程中,DataNode 在刪除 Block 時,是不會真的將 Block 刪除的,而是先將Block 檔案放到一個 Trash 目錄中,為了能夠使用原來的 FallBack Fsimage 恢復以前的資料。當升級週期比較長時,Trash 中的資料就會很多,例如我們這邊大叢集升級週期就有3周之長。升級操作在短時間之內,是可以確定是否有問題的,並且三週之後也不可能真的回滾到以前的資料,倘若真的遇到問題,是需要及時修復的。我們開發了額外的工具,對 Trash 中的 Block 檔案進行按天歸檔,設定好保留時間,例如設定1天。我們會每天例行將1天之前的資料進行刪除,這樣可以大大減少 DataNode 上磁碟的儲存壓力。
升級之後,我們對各個叢集進行都進行自己觀察,目前服務一切正常。
5.總結
非常高興在如此大規模的叢集上完成從2.7到3.2的滾動升級,走在了行業的前列。HDFS 升級過程漫長,但是收益是非常多的。在此基礎上,我們可以繼續做非常有意義的工作,持續在穩定性、效能、成本等多個方面深入探索,使用技術為公司創造可見的價值。
本文作者▬費輝
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908606/viewspace-2672346/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Presto在滴滴的探索與實踐REST
- 實時數倉在滴滴的實踐和落地
- 大規模 Hadoop 升級在 Pinterest 的實踐HadoopREST
- MySQL 升級的最佳實踐MySql
- 資訊公交服務在滴滴的應用實踐
- 機器學習在滴滴網路定位中的探索和實踐機器學習
- 實踐 | Kylin在滴滴OLAP引擎中的應用
- 升級Webpack5實踐Web
- React Native無感升級在滿幫集團的實踐React Native
- 資訊架構升級在DataSimba的實踐 | StartDT Tech Lab 02架構
- 在滴滴雲上搭建 API-Gateway Kong 實踐APIGateway
- AWS RDS強制升級的應對之道——版本升級的最佳實踐
- 最佳實踐 | 原始碼升級gcc原始碼GC
- 滴滴HBase大版本滾動升級之旅
- 滴滴業務研發的精益實踐
- Android Architecture Component 和架構升級在銘師堂的實踐Android架構
- PB級資料實時查詢,滴滴Elasticsearch多叢集架構實踐Elasticsearch架構
- 滴滴 NewSQL 演進之 Fusion 實踐SQL
- Android 中的升級資料庫最佳方法實踐Android資料庫
- SpringBoot2.7升級到3.0的實踐分享Spring Boot
- 羅江宇:Flink Streaming在滴滴的大規模生產實踐
- Kubernetes 叢集無損升級實踐
- dubbo2升級到dubbo3實踐
- 汽車之家Unity前端通用架構升級實踐Unity前端架構
- Linux作業系統升級openssh實踐Linux作業系統
- kubernetes實踐之四十:Pod的升級與回滾
- 滴滴 Elasticsearch 多叢集架構實踐Elasticsearch架構
- ChatOps=AIOps落地+DevOps升級+SRE實踐AIdev
- Android應用增量升級方案之實踐篇Android
- 【經驗】記錄一次MySQL升級的運維實踐MySql運維
- 劉博宇:Druid在滴滴應用實踐及平臺化建設UI
- 滴滴七層接入平臺實踐和探索
- 京東零售資料資產能力升級與實踐
- 日請求億級的QQ會員AMS平臺PHP7升級實踐PHP
- 「Vue實踐」專案升級vue-cli3的正確姿勢Vue
- 實踐案例:同程藝龍網的 Dubbo 升級經驗總結
- 手機淘寶輕店業務 Serverless 研發模式升級實踐Server模式
- Kubernetes 叢集升級指南:從理論到實踐