日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop_NameNode_代码分析_目录树(2)

發布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop_NameNode_代码分析_目录树(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)NameNode的內存中保存了龐大的目錄樹結構,這個結構用來保存文件目錄結構和文件Block之間的映射,這種結構關系會固化在磁盤上,但是對樹的改動頻繁發生,什么時候將樹寫入磁盤呢?把每次操作應用到內存中的樹上,并把操作記錄成日志文件,每次操作不會改變固化在磁盤上的改動發生之前的目錄樹,適當的時候做一次固化操作并記錄時間。

(2)NameNode上面的磁盤目錄結構:

[hadoop@localhost dfs]$ ls -R name

name:
current??image??in_use.lock

name/current:
edits??fsimage??fstime??VERSION

name/image:
fsimage

in_use.lock的功能和DataNode的一致。fsimage保存的是文件系統的目錄樹,edits則是文件樹上的操作日志,fstime是上一次新打開一個操作日志的時間(long型)。NameNode成功載入一次fsimage就要把這個時刻記錄在fstime中,fstime表示edits第一條記錄開始記錄的時刻。saveImage的時候需要先寫入中間文件,防止中途斷電。

image/fsimage是一個保護文件,防止0.13以前的版本啟動(0.13以前版本將fsimage存放在name/image目錄下,如果用0.13版本啟動,顯然在讀fsimage會出錯J)。也就是說寫入fsimage要有兩份。

(3)管理NameNode磁盤目錄的是FSImage,也是繼承Storage類的,和DataStorage類似,有升級回退機制,暫時不考慮。

(4)FSImage需要支持參數-importCheckpoint,該參數用于在某一個checkpoint目錄里加載HDFS的目錄信息,并更新到當前系統,該參數的主要功能在方法doImportCheckpoint中。該方法很簡單,通過讀取配置的checkpoint目錄來加載fsimage文件和日志文件,然后利用saveFSImage(下面討論)保存到當前的工作目錄,完成導入。

(5)loadFSImage用來在多個目錄中選擇最新的fsimage和edit來載入,最新以及fsimage和edit的一致性由fstime保證,載入過程中對NameNode崩潰的處理要分析saveFSImage的過程在明白。

(6)saveFSImage()的功能正好相反,它將內存中的目錄樹持久化,很自然,目錄樹持久化后就可以把日志清空。saveFSImage()會創建edits.new,并把當前內存中的目錄樹持久化到fsimage.ckpt(fsimage現在還存在),然后重新打開日志文件edits和edits.new,這會導致日志文件edits和edits.new被清空。最后,saveFSImage()調用rollFSImage()方法。

rollFSImage()上來就把所有的edits.new都改為edits(經過了方法saveFSImage,它們都已經為空),然后再把fsimage.ckpt改為fsimage。

(7)saveFSImage和loadFSImage為了考慮NameNode突然崩潰的情況使磁盤固化操作得以回滾創建了中間狀態,中間狀態的描述方式就是在磁盤上建立臨時文件。

轉載于:https://www.cnblogs.com/JohnLiang/archive/2011/11/10/2244392.html

總結

以上是生活随笔為你收集整理的Hadoop_NameNode_代码分析_目录树(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。