1. 程式人生 > >一探究竟:Namenode、SecondaryNamenode、NamenodeHA關係

一探究竟:Namenode、SecondaryNamenode、NamenodeHA關係

NameNode與Secondary NameNode

很多人都認為,Secondary NameNode是NameNode的備份,是為了防止NameNode的單點失敗的,其實並不是在這樣。文章Secondary Namenode - What it really do? (需FQ)寫的很通俗易懂,現將其翻譯如下:

Secondary NameNode:它究竟有什麼作用?

在Hadoop中,有一些命名不好的模組,Secondary NameNode是其中之一。從它的名字上看,它給人的感覺就像是NameNode的備份。但它實際上卻不是。

很多Hadoop的初學者都很疑惑,Secondary NameNode究竟是做什麼的,而且它為什麼會出現在HDFS中。

因此,在這篇文章中,我想要解釋下Secondary NameNode在HDFS中所扮演的角色。

從它的名字來看,你可能認為它跟NameNode有點關係。沒錯,你猜對了。因此在我們深入瞭解Secondary NameNode之前,我們先來看看NameNode是做什麼的。

NameNode

NameNode主要是用來儲存HDFS的元資料資訊,比如名稱空間資訊,塊資訊等。當它執行的時候,這些資訊是存在記憶體中的。但是這些資訊也可以持久化到磁碟上。

這裡寫圖片描述

上面的這張圖片展示了NameNode怎麼把元資料儲存到磁碟上的。這裡有兩個不同的檔案:

fsimage - 它是在NameNode啟動時對整個檔案系統的快照
edit logs - 它是在NameNode啟動後,對檔案系統的改動序列
只有在NameNode重啟時,edit logs才會合併到fsimage檔案中,從而得到一個檔案系統的最新快照

但是在生產叢集中NameNode是很少重啟的,這也意味著當NameNode運行了很長時間後,edit logs檔案會變得很大。

在這種情況下就會出現下面一些問題:

edit logs檔案會變的很大,怎麼去管理這個檔案是一個挑戰。
NameNode的重啟會花費很長時間,因為有很多改動[筆者注:在edit logs中]要合併到fsimage檔案上。
如果NameNode掛掉了,那我們就丟失了很多改動因為此時的fsimage檔案非常舊。
因此為了克服這個問題,我們需要一個易於管理的機制來幫助我們減小edit logs檔案的大小和得到一個最新的fsimage檔案,這樣也會減小在NameNode上的壓力。

這跟Windows的恢復點是非常像的,Windows的恢復點機制允許我們對OS進行快照,這樣當系統發生問題時,我們能夠回滾到最新的一次恢復點上。

現在我們明白了NameNode的功能和所面臨的挑戰 - 保持檔案系統最新的元資料。那麼,這些跟Secondary NameNode又有什麼關係呢?

Secondary NameNode

SecondaryNameNode就是來幫助解決上述問題的,它的職責是合併NameNode的edit logs到fsimage檔案中。

這裡寫圖片描述

上面的圖片展示了Secondary NameNode是怎麼工作的。

首先,它定時到NameNode去獲取edit logs,並更新到fsimage上。[筆者注:Secondary NameNode自己的fsimage]
一旦它有了新的fsimage檔案,它將其拷貝回NameNode中。
NameNode在下次重啟時會使用這個新的fsimage檔案,從而減少重啟的時間。
Secondary NameNode的整個目的是在HDFS中提供一個檢查點。它只是NameNode的一個助手節點。這也是它在社群內被認為是檢查點節點的原因。

現在,我們明白了Secondary NameNode所做的不過是在檔案系統中設定一個檢查點來幫助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的備份。

所以從現在起,讓我們養成一個習慣,稱呼它為檢查點節點吧。

這篇文章基本上已經清楚的介紹了Secondary NameNode的工作以及為什麼要這麼做。

最後補充一點細節,是關於NameNode是什麼時候將改動寫到edit logs中的?

這個操作實際上是由DataNode的寫操作觸發的,當我們往DataNode寫檔案時,DataNode會跟NameNode通訊,告訴NameNode什麼檔案的第幾個block放在它那裡,NameNode這個時候會將這些元資料資訊寫到edit logs檔案中。

NameNode HA與Secondary NameNode

在hadoop2.0之前,namenode只有一個,存在單點問題(雖然hadoop1.0有secondarynamenode,checkpointnode,buckcupnode這些,但是單點問題依然存在),在hadoop2.0引入了HA機制。

hadoop2.0的HA機制官方介紹了有2種方式,一種是NFS(Network File System)方式,另外一種是QJM(Quorum Journal Manager)方式。

2 基本原理 

hadoop2.0的HA 機制有兩個namenode,一個是active namenode,狀態是active;另外一個是standby namenode,狀態是standby。

兩者的狀態是可以切換的,但不能同時兩個都是active狀態,最多隻有1個是active狀態。只有active namenode提供對外的服務,standby namenode是不對外服務的。

active namenode和standby namenode之間通過NFS或者JN(journalnode,QJM方式)來同步資料。

active namenode會把最近的操作記錄寫到本地的一個edits檔案中(edits file),並傳輸到NFS或者JN中。

standby namenode定期的檢查,從NFS或者JN把最近的edit檔案讀過來,然後把edits檔案和fsimage檔案合併成一個新的fsimage,合併完成之後會通知active namenode獲取這個新fsimage。

active namenode獲得這個新的fsimage檔案之後,替換原來舊的fsimage檔案。

這樣,保持了active namenode和standby namenode的資料的實時同步,standby namenode可以隨時切換成active namenode(譬如active namenode掛了)。

而且還有一個原來hadoop1.0的secondarynamenode,checkpointnode,buckcupnode的功能:合併edits檔案和fsimage檔案,使fsimage檔案一直保持更新。

所以啟動了hadoop2.0的HA機制之後,secondarynamenode,checkpointnode,buckcupnode這些都不需要了。

3 NFS方式 

NFS作為active namenode和standby namenode之間資料共享的儲存。active namenode會把最近的edits檔案寫到NFS,而standby namenode從NFS中把資料讀過來。

這個方式的缺點是,如果active namenode或者standby namenode有一個和NFS之間網路有問題,則會造成他們之前資料的同步出問題。


4 QJM(Quorum Journal Manager )方式 

QJM的方式可以解決上述NFS容錯機制不足的問題。active namenode和standby namenode之間是通過一組journalnode(數量是奇數,可以是3,5,7...,2n+1)來共享資料。

active namenode把最近的edits檔案寫到2n+1個journalnode上,只要有n+1個寫入成功就認為這次寫入操作成功了,然後standby namenode就可以從journalnode上讀取了。

可以看到,QJM方式有容錯的機制,可以容忍n個journalnode的失敗。

5 主備節點的切換

active namenode和standby namenode可以隨時切換。當active namenode掛掉後,也可以把standby namenode切換成active狀態,成為active namenode。

可以人工切換和自動切換。人工切換是通過執行HA管理的命令來改變namenode的狀態,從standby到active,或者從active到standby。

自動切換則在active namenode掛掉的時候,standby namenode自動切換成active狀態,取代原來的active namenode成為新的active namenode,HDFS繼續正常工作。


主備節點的自動切換需要配置zookeeper。active namenode和standby namenode把他們的狀態實時記錄到zookeeper中,zookeeper監視他們的狀態變化。

當zookeeper發現active namenode掛掉後,會自動把standby namenode切換成active namenode。

6 實戰tips 

  • QJM方式有明顯的優點,一是本身就有fencing的功能,二是通過多個journal節點增強了系統的健壯性,所以建議在生成環境中採用QJM的方式。
  • journalnode消耗的資源很少,不需要額外的機器專門來啟動journalnode,可以從hadoop叢集中選幾臺機器同時作為journalnode。

相關推薦

究竟NamenodeSecondaryNamenodeNamenodeHA關係

NameNode與Secondary NameNode 很多人都認為,Secondary NameNode是NameNode的備份,是為了防止NameNode的單點失敗的,其實並不是在這樣。文章Secondary Namenode - What it really do? (需FQ)寫的很通俗易懂,現將其翻譯

究竟善用 MaxCompute Studio 分析 SQL 作業

情況 itl app 超過 title 如何 string tps 是把 頭疼的問題 MaxCompute 用戶一個常見的問題是:同一個周期任務,為什麽最近幾天比之前慢了很多?或者為什麽之前都能按時產出的作業最近經常破線? 通常來說,引起作業執行變慢的原因有:quota 組

究竟安卓老牌註解框架androidannotations

簡介 AndroidAnnotations is an Open Source framework that speeds up Android development. It takes care of the plumbing, and l

從合二為一到分為三細數3G4G5G的技術發展之路

話說天下大勢,合久必分,分久必合,通訊技術也是如此,分分合合是通訊技術的主旋律,從3G、4G到5G技術發展之路就生動地說明了這一點。 從3G到4G:合二為一 4G是從3G技術發展過來的。 在3G時代,3GPP旗下有WCDMA為代表的FDD技術以及以TD-SCDMA為代表的TDD技術,各

我們來究竟 Android 7.0 適配中 FileProvider 部分

rip 使用 star 過程 限制 需要 lock 目錄文件 support 本文標簽: Android7.0 FileProvider 由於 Android 7.0 或更高版本的系統在國內手機市場上的占比不是很高,很多 Android 開發人員並沒有做 7.0 適配工作,

Python難嗎?華為雲學院帶你究竟

數據 對比 pac 常用 靜態 必須 面向對象 如何 開源 Python是一直廣受大家歡迎的編程語言,簡單易學並且功能非常強大。python擁有高效的高級數據結構,並且能夠簡單並且快速的進行面向對象的編程。python的語法簡潔優雅,並且它是動態語言,加上它的語言的可解釋性

阿里雲總監課,儲存系統設計——NVMe SSD效能影響因素究竟

目錄 1 儲存介質的變革 2 NVME SSD成為主流 2.1 NAND FLASH介質發展 2.2 軟體層面看SSD——多佇列技術 2.3 深入理解SSD硬體 3 影響NVME SSD的效能因素 3.1 GC對效能的影響 3.2 IO PATTERN對效能的

究竟Activity的過程

好像工作了這麼久,從來沒去追究過Android是從哪裡啟動的,所以最近帶著這個疑問來看了看原始碼。也和大家分享一下這個知識。 1.Activity是什麼? Activity是Android元件中最基本也是最為常見用的四大元件之一。 2.Activity的生命週期? 下面

資料中心從何而來?華為雲學院帶你究竟

資料中心的定義和概念都是隨著時代的變遷而不斷變化的,那麼資料中心是從何而來如何發展的?我們又是如何一步一步的走入資料時代的呢?大家如果去查一下計算機發展的歷史,可能會驚奇的發現,我們身邊隨處可見的計算機,它的歷史其實只有短短的七十幾年。然而在這麼小的時間跨度裡,計算機的發展卻已經經歷了幾次重大的轉型,而資料中

大家瞭解Java基本語法嗎?來太閣,究竟

大家瞭解Java基本語法嗎?知道什麼是Java變數嗎?變數是如何分配記憶體的?程式的結構又是什麼樣的?今晚八點 太閣0基礎大資料入門課之Java基礎篇 將帶著大家一探究竟 今日課題 Java基本語法 基本資料類 變數與常量Java中的運算子 程式的結構 點選

[html5入門-14]究竟“後代選擇器與子選擇器的區別”

在學習前端開發時,糾結過後代選擇器和子選擇器的區別,現根據目前所學水平蒐集和整理了這兩種選擇器的區別,分享給大家,如有誤導之處,敬請之處。 一.語法上區別 後代選擇器語法:最高代 下一代 ...子代 代與代之間用空格隔開 子選擇器語法:最高代>下一代>...&g

golang 對 package import 究竟

剛開始學golang,它的模組不像node裡的那麼直觀,直接在一個地方exports 另一個地方 require 就行,弄的我半天都沒弄懂機制 接下來把我的經驗分享下: 例如我們已有檔案的目錄結構為,package分為add和main: addNum.go的程式碼: packa

Android子執行緒真的不能更新UI嗎?讓我們從原始碼的角度究竟

關於主執行緒更新UI這已經是個老生常談的話題,幾乎所有人都知道Android要在主執行緒更新UI。 Android官方文件這樣描述:Android UI操作並不是執行緒安全的,並且這些操作必須在UI執行緒執行。 那麼,子執行緒到底能否更新UI,如果不能更新U

未明學院活動機器學習熱門專案開始報名,次收穫資料勘&機器學習技能行業專案經歷!

隨著大資料時代的到來,金融、通訊、網際網路等越來越多的行業需要資料科學方面的人才。在數聯尋英2016年釋出的《大資料人才報告》中表明,現階段我國大資料人才僅有 46 萬,在未來 3-5 年內大資料人才缺口將高達 150 萬。 缺口的逐漸增大,大資料人才的薪資也跟著水漲船高。據某權威招聘

Nginx實用教程(啟動停止重載配置

style 負載 繼續 local con doc lin 配置文件的修改 tex Nginx是一個功能強大的web服務器和負載均衡軟件,由俄羅斯人開發。Nginx包括一個master進程和數個worker進程,master進程用於讀取、解析配置文件和管理worker進程,

Java中StringStringBuilderStringBuffer常用源碼分析及比較(String源碼分析

array string類 都是 epo sys 匹配字符串 bound 地址 簡單 String: 一、成員變量: /** The value is used for character storage. */ private final char value[

Java泛型(入門原理使用

core clas set out keyword getclass code 避免 post 遠在 JDK 1.4 版本的時候,那時候是沒有泛型的概念的。當時 Java 程序員們寫集合類的代碼都是類似於下面這樣: List list = new ArrayList();

java集合(ListIteratorArrayArrayListLinkList

整體 http 是否 簡潔 畢業 一個 位置 數據 reac 畢業這麽久,java 標準庫中的集合都沒怎麽仔細了解過,準備好好學習學習。 集合(Collection):由一個或多個確定的元素所構成的整體叫做 集合--百度百科的解釋。換言之,就是裝元素的容器,元素可以是任何類

算力真偽萬物在華為北研所秘榮耀10的新物種可能

榮耀10不久之前,新華社公眾號在愚人節那天發布了一條《發現手機攝影新物種》的推送,並將地點標註在華為北研所。當天就有讀者留言,問我們這到底是什麽意思,是不是手機AI攝影又要搞個大新聞?很巧的是,很快腦極體就有幸受邀前往華為北研所,對手機攝影新物種這件事進行了探訪,並與華為海思芯片產品市場總監周晨與榮耀產品副總

Python基礎筆記系列十標準輸入輸出文件讀寫和指針等操作

mode strong sublime pre 字符串類型 類型 print語句 open 同時   本系列教程供個人學習筆記使用,如果您要瀏覽可能需要其它編程語言基礎(如C語言),why?因為我寫得爛啊,只有我自己看得懂!! 標準輸入輸出一、輸入  在sublime中這