天天看點

Hadoop叢集各守護程序入門級詳解

Hadoop是一個能夠對大量資料進行分布式處理的軟體架構,分布式處理主要展現在分布式存儲和分布式計算方面。在一個hadoop分布式叢集中,hadoop是基于主/從(master/slave)架構運作的,而想讓叢集運作起來需要在叢集中運作一系列的背景(deamon)程式,這些背景程式就被我們稱為hadoop的守護程序。

      現在所被人熟知的有hadoop1.x和hadoop2.x兩大版本,不同版本的hadoop其守護程序也有所不同:

hadoop1.x hadoop2.x
NameNode NameNode
DataNode DataNode
SecondaryNameNode SecondaryNameNode
TaskTracker NodeManager
JobTracker ResourceManager

      這是由于在hadoop1.x時代,屬于MapReduce的守護程序JobTracker和TaskTracker具有很多局限性,是以在更新後的hadoop2.x時代推出了新的YARN+MapReduce模式進而出現了新的守護程序NodeManager和ResourceManager。

    YARN 并不是下一代MapReduce(MRv2),下一代MapReduce與第一代MapReduce(MRv1)在程式設計接口、資料處理引擎(MapTask和ReduceTask)是完全一樣的, 可認為MRv2重用了MRv1的這些子產品,不同的是資源管理和作業管理系統,MRv1中資源管理和作業管理均是由JobTracker實作的,集兩個功能于一身,而在MRv2中,将這兩部分分開了。 其中,作業管理由ApplicationMaster實作,而資源管理由新增系統YARN完成,由于YARN具有通用性,是以YARN也可以作為其他計算架構的資源管理系統,不僅限于MapReduce,也是其他計算架構(例如Spark)的管理平台。

      Hadoop1時代中MapReduce可以說是啥事都幹,而Hadoop2中的MapReduce的話則是專門處理資料分析,而YARN則做為資料總管而存在。

      該架構将JobTracker中的資源管理及任務生命周期管理(包括定時觸發及監控),拆分成兩個獨立的服務,用于管理全部資源的ResourceManager以及管理每個應用的ApplicationMaster,ResourceManager用于管理向應用程式配置設定計算資源,每個ApplicationMaster用于管理應用程式、排程以及協調。一個應用程式可以是經典的MapReduce架構中的一個單獨的Job任務,也可以是這些任務的一個DAG(有向無環圖)任務。ResourceManager及每台機上的NodeManager服務,用于管理那台主機的使用者程序,形成計算架構。每個應用程式的ApplicationMaster實際上是一個架構具體庫,并負責從ResourceManager中協調資源及與NodeManager(s)協作執行并監控任務。

    由于hadoop1.x的時代已經過去,這裡我們對hadoop2.x中的各守護程序進行一定的解釋。

1.NameNode

      Namenode 管理着檔案系統的Namespace。它維護着檔案系統樹(filesystem tree)以及檔案樹中所有的檔案和檔案夾的中繼資料(metadata)。管理這些資訊的檔案有兩個,分别是Namespace 鏡像檔案(Namespace image)和記錄檔檔案(edit log),這些資訊被Cache在RAM中,當然,這兩個檔案也會被持久化存儲在本地硬碟。Namenode記錄着每個檔案中各個塊所在的資料節點的位置資訊,但是他并不持久化存儲這些資訊,因為這些資訊會在系統啟動時從資料節點重建。

2.DataNode

      Datanode是檔案系統的工作節點,他們根據用戶端或者是namenode的排程存儲和檢索資料,并且定期向namenode發送他們所存儲的塊(block)的清單。叢集中的每個伺服器都運作一個DataNode背景程式,這個背景程式負責把HDFS資料塊讀寫到本地的檔案系統。當需要通過用戶端讀/寫某個資料時,先由NameNode告訴用戶端去哪個DataNode進行具體的讀/寫操作,然後,用戶端直接與這個DataNode伺服器上的背景程式進行通信,并且對相關的資料塊進行讀/寫操作。

3.Secondary NameNode

      Secondary NameNode是一個用來監控HDFS狀态的輔助背景程式。就像NameNode一樣,每個叢集都有一個Secondary NameNode,并且部署在一個單獨的伺服器上。Secondary NameNode不同于NameNode,它不接受或者記錄任何實時的資料變化,但是,它會與NameNode進行通信,以便定期地儲存HDFS中繼資料的快照。由于NameNode是單點的,通過Secondary NameNode的快照功能,可以将NameNode的當機時間和資料損失降低到最小。同時,如果NameNode發生問題,Secondary NameNode可以及時地作為備用NameNode使用。

4.ResourceManager

      在YARN中,ResourceManager負責叢集中所有資源的統一管理和配置設定,它接收來自各個節點(NodeManager)的資源彙報資訊,并把這些資訊按照一定的政策配置設定給各個應用程式(實際上是ApplicationManager)。

5.NodeManager

      NodeManager是YARN中每個節點上的代理,它管理hadoop叢集中單個計算節點,包括與ResourceManger保持通信,監督container的生命周期管理,監控每個Container的資源使用(記憶體、CPU等)情況,追蹤節點健康狀況,管理日志和不同應用程式用到的附屬服務。

      最後結合前文需要總結的一點是,原生hadoop中,HDFS分布式檔案系統擁有:NameNode、DataNode、SecondaryNameNode3個守護程序,可以通過

start-dfs.sh/stop-dfs.sh

指令來開啟/關閉程序。MapReduce分布式并行計算架構擁有:ResourceManager和NodeManager兩個守護程序,可以通過

start-yarn.sh/stop-yarn.sh

指令來開啟/關閉程序。

      對于具有主/從結構的hadoop叢集來說,master主節點上一般會運作NameNode、ResourceManager兩個守護程序,slave從節點上一般會運作DataNode、NodeManager和SecondaryNameNode(在多從節點的叢集中一般會選擇在某一個從節點上運作)等程序,各守護程序之間各有聯系,共同維護整個hadoop叢集的正常運作。

繼續閱讀