HDFS DataNode公升級過程

2021-10-07 18:21:17 字數 2510 閱讀 9988

公升級需要重點考慮的幾個問題

datastorage重要的功能就是管理磁碟儲存空間的生命週期。公升級是磁碟儲存空間生命週期管理中最重要的乙個環節,尤其是對於hdfs這樣的分布式儲存系統,公升級需要重點考慮以下幾個問題。

版本相容性問題:不同版本之間相容性的設計,高版本是否需要相容低版本?不同元件之間,例如datanode和namenode之間的版本是否需要一致?

公升級消耗的磁碟空間問題:我們知道datanode最主要的功能是儲存資料塊,而這些資料塊往往占用比較大的磁碟空間。如何做到既能保留原有版本的資料,正確地完成公升級操作,同時又能節省磁碟空間呢?

回滾要求:在hdfs的公升級過程中,很有可能出現各種異常,包括硬體的異常、軟體的異常以及人為的操作失誤。那麼如何在公升級失敗的情況下,回滾到之前正確的狀態。

公升級機制

考慮到上面的問題,hdfs實現了一套完整的公升級機制。

■   關於相容性:hdfs支援節點版本的向上公升級,但並不支援向下降版本。hdfs各個元件作為乙個整體公升級或者回滾,同一集群中有不同版本的元件是不被支援的。同時hdfs確保在公升級過程中,舊版本的結構可以遷移至新版本。這裡要注意,如果新版本的檔案系統布局不需要改變,則公升級非常簡單,只需匯入新的**與依賴包,載入配置檔案,重啟服務即可:如果需要改變檔案系統布局、元資料資料結構等 (layoutversion發生改變),則公升級過程會比較複雜,需要考慮回滾等容錯機制。

■   關於回滾:hdfs回滾機制主要是通過備份舊版本資料實現的,回滾時將舊版本資料複製到原有目錄中即可。hdfs僅保留前乙個版本的資料,同時引入公升級提交機制,當管理員提交了一次公升級時, hdfs將會刪除之前的版本,也就是提交公升級之後,無法再進行回滾操作。

■   關於磁碟空間:在hdfs的公升級過程中,需要複製低版本資料以支援回滾操作。但由於datanode儲存的資料塊占用的磁碟空間往往比較大,所以資料節點使用了linux 硬鏈結方式,也就是將新版本和舊版本中兩個資料塊檔案的引用指向磁碟中的同乙個資料塊,巧妙地節省了磁碟空間。

具體操作

hdfs公升級機制是通過磁碟檔案目錄的配合來進行的,如圖所示,我們可以將datanode 公升級分為三個步驟:公升級、回滾和提交。

1.公升級操作

公升級操作就是將datanode從低版本公升級到高版本。主要涉及以下目錄。

■   current目錄:儲存當前版本資料的目錄。

■   previous.tmp目錄:在公升級過程中,儲存當前版本資料的目錄。

在datanode公升級時,會將當前版本資料所在的current目錄改名為previous.tmp,然後為新版本資料重建current目錄。接下來建立current目錄與previous.tmp中資料塊檔案和校驗和檔案之間的硬鏈結。最後將 previous.tmp改名為previous,完成公升級。這時資料夾中的current目錄儲存的是當前版本的資料,previous目錄儲存的是上一版本的資料。

2.回滾操作

回滾操作就是將datanode回滾至上一版本。主要涉及以下目錄.

■   removed.tmp目錄:在回滾過程中,儲存當前版本資料的目錄。

■   current目錄:回滾後,儲存當前版本資料的目錄.

在datanode回滾時,會先將current目錄改名為removed.tmp,然後將previous目錄改名 為current,最後刪除removed.tmp目錄。回滾完成後,資料夾中只有current —個目錄儲存回 滾後版本的資料。

3. 公升級提交操作

公升級提交操作就是提交當前公升級,刪除上一版本資料,提交之後,datanode將不可回滾. 主要涉及以下目錄.

■       finalized.tmp目錄:在提交過程中,儲存前一版本資料的目錄。

在公升級提交時,先將previous目錄改名為finalized.tmp.然後刪除finalized.tmp目錄。提 交操作完成後,資料夾中只有current 乙個目錄儲存當前版本的資料。

我們以公升級操作為例,如果不使用previous.tmp目錄,而是直接將新建的current目錄硬鏈結到previous目錄,若這個過程發生錯誤,那麼current與previous目錄之間的資料就會不一致,導致公升級失敗。這時,當資料節點再次啟動時,它並不能根據current和previous目錄的不一致判斷公升級過程中是否發生了錯誤。而引入臨時目錄previous.tmp後,資料節點啟動時如果發現儲存空間中有該臨時目錄,就可以判斷上一次公升級失敗了。回滾操作中的臨時目錄removed.tmp以及提交操作中的臨時目錄finalized.tmp作用也是相同的。

HDFS Datanode關於block檔案的管理

資料檔案真正儲存的地方是在datanode,當使用者需要填充檔案中某乙個block的實際資料內容時,就需要連線到datanode進行實際的block寫入操作,下面我們看一下datanode如何管理block,以及如何儲存block。datanode 是通過檔案儲存block資料的 datanode中...

HDFS DataNode的目錄結構

目標 掌握datanode的目錄結構 和namenode不同的是,datanode的儲存目錄是初始階段自動建立的,不需要額外格式化。在 export servers hadoop 2.6.0 cdh5.14.0 hadoopdatas datanodedatas current這個目錄下檢視版本號 ...

(一)Synchronized鎖公升級的大致過程

因為synchronized是跑在jvm上,jvm對於作業系統的核心來說,就是乙個普通的應用程式,synchronized想要申請一把鎖,需要交給boss 作業系統核心態 來做,做好後反饋給你,所以叫重量級所 其中的偏向鎖和輕量級鎖是在使用者態完成的,不需要經過boss 作業系統核心 重量級鎖是需要...