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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276941.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276941.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276941.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳解 Visual C# 數據庫編程

詳解 Visual C# 數據庫編程 ******2007-11-05 14:34關于數據庫編程,微軟提供了一個統一的數據對象訪問模型,在Visual Studio6.0中稱為ADO,在.NET中則統一為ADO.NET,掌握ADO.NET就等于掌握了數據庫編程的核心。 針對數據庫編程始終是程序設計語…

swift - 根試圖控制器的手勢返回沖突 - push 新的tabbar控制器手勢沖突

1. 禁用手勢 和開啟手勢extension JYRTSShopListController: UIGestureRecognizerDelegate {/// 禁止使用手勢返回func forbidhenSideBack() {self.isCanSideBack falseif (self.navigationController?.responds(to:#selector(getter: self.navigationController?.interacti…

Acer 4750 安裝黑蘋果_黑蘋果系統安裝通用教程圖文版

在開始之前,不管你要安裝的是臺式組裝機,臺式品牌機,一體機,還是筆記本,都要大概了解一下硬件信息。因為黑蘋果的安裝確實比安裝Windows的系統要復雜的多。不管是前期準備工作,安裝,還是安裝之后…

IIS7中使用集成模式時出現HttpException

癥狀:在iis7在使用集成模式的Pool可能出現HttpException,而程序在經典模式下能正常運行. 解決方法:http://mvolo.com/blogs/serverside/archive/2007/11/10/Integrated-mode-Request-is-not-available-in-this-context-in-Application_5F00_Start.aspx 轉載于:https://www.cnbl…

教你學會七種維護服務器安全最佳技巧

導讀: 你的計算機上是否存在有至關重要的數據,并且不希望它們落入惡人之手呢?當然,它們完全有這種可能 。而且,近些年來,服務器遭受的風險也比以前更大了.越來越多的病毒,心懷不軌的黑客,以及那些商業間諜都將服務器作為了自己的目標.很顯然,服務器的安全問題是不容…

mysql 快速生成百萬條測試數據

轉自:http://www.cnblogs.com/jiangxiaobo/p/6101072.html 1、生成思路 利用mysql內存表插入速度快的特點,先利用函數和存儲過程在內存表中生成數據,然后再從內存表插入普通表中2、創建內存表及普通表 CREATE TABLE vote_record_memory (id I…

自動化專業學python有用嗎-馬哥教育官網-專業Linux培訓班,Python培訓機構

今天小編要來說一下Python自動化的學習思路, 對于剛剛進入的測試行業的人來說,未來該怎么樣朝著自動化方向發展,即使接觸到了自動化測試,又該從何下手去學呢? 簡單的說, 做測試做的好,會了接口&…

java JVM

每一個Java虛擬機都由一個類加載器子系統(class loader subsystem),負責加載程序中的類型(類和接口),并賦予唯一的名字。每一個Java虛擬機都有一個執行引擎(execution engine)負責執…

馬化騰聯手10余位科學家發起科學探索獎,騰訊基金投入10億元啟動資金

11月9日消息,據騰訊科技報道,騰訊基金會于騰訊公司成立20周年之際宣布,騰訊公司董事會主席兼首席執行官,騰訊基金會發起人馬化騰,與北京大學教授饒毅,攜手楊振寧、毛淑德、何華武、鄔賀銓、李培根、陳十一、…

給Domino系統管理員的十二項建議

Domino系統管理員的日常工作就是維護Domino系統的正常運行。以下簡要說明了管理員所必做的一些工作。對于系統管理員,特別是新建系統的管理員來說,這些建議能幫助他們完成基本的維護工作。 根據許多資深的Domino管理員和咨詢人員的經驗,我們對…

delphi 軟件在線人數統計_8款值得學習的科研論文作圖軟件

寫在前面科研繪圖在國外已經非常流行,且被高度重視,國內科研人員也越來越重視科研方面的繪圖。不少科研工作者,包括在讀的博士生、研究生等可能都有這樣的體會:千辛萬苦得來的實驗結果,不知道該如何展現給別人?曾經有…

技術管理—管理書籍推薦

技術出身,考慮接觸下管理方面的知識。也許管理真的適合你,角色認知?角色實踐?角色勝任!最后愛上它! 我最喜歡的一本書--高效能人士的七個習慣 作者:史蒂芬柯維(Stephen Richards Covey) 該…

JS 幾種數據類型及其轉換

ECMAScript 標準定義了 7 種數據類型: Number;String;Boolean;Symbol;Null;Undefined;Object 。通常,數值、字符串、布爾值、undefined和null這五種類型,合稱為簡單類型的值&#xf…

網絡虛擬化有幾種實現方式_停車場管理系統的防砸車功能有幾種方式?如何實現?...

原標題:停車場管理系統的防砸車功能有幾種方式?如何實現?前言0101正文一、壓力波防砸裝置也叫遇阻防砸,主要是安裝遇阻返回裝置,當道閘桿下落過程中接觸到車輛或者行人(接觸力度是可以調節的),裝置道閘桿底…

Socket 死連接詳解

當使用 Socket 進行通信時,由于各種不同的因素,都有可能導致死連接停留在服務器端,假如服務端需要處理的連接較多,就有可能造成服務器資源嚴重浪費,對此,本文將闡述其原理以及解決方法。 在寫 Socket 進行通…

[Swift]LeetCode1146. 快照數組 | Snapshot Array

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★?微信公眾號:山青詠芝(shanqingyongzhi)?博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)?GitHub地址&a…

aspnet中gridview文本只顯示開始幾個文本_軟網推薦:三個小軟件 輕松解決文本操作難題...

TXT文本操作在Windows操作中算是比較容易的事了,但簡單的文本操作也會遇到難題。例如,對于我們反復需要使用的多個信息,如果僅靠CtrlC和CtrlV來回復制、粘貼,效率會極低;再如,對于一些軟件組件中顯示的文本…

剛被IBM收購的紅帽,它的下一站是中國

前不久IBM斥資340億美元收購紅帽的新聞震驚了所有人,這個金額是互聯網上第三大交易,也是開源史上最大交易。這個收購背后到底有哪些目的?紅帽接下來會做什么?11月6日紅帽在北京舉辦紅帽論壇,向外界介紹了紅帽的想法。 …

驗證DetailsView插入數據不為空

驗證DetailsView插入數據不為空,在對象數據源ObjectDataScource(ChannelDS)的Inserting事件中寫如下代碼:protected void ChannelDS_Inserting(object sender, ObjectDataSourceMethodEventArgs e) { string name "";…

為什么onenote一直在加載_OneNote:科研筆記獨一無二的無敵利器

每個人都夢想著自己有超乎常人的記憶力,擁有者過目不忘的技能,從此走向人生巔峰……然而我們都不是那樣的人,在這個高速發展的數字新信息時代,進行有效的記憶,保存我們隨時到來的靈感等,這就需要我們進行筆…