1. 程式人生 > >hadoop中各個節點的功能及HDFS檔案上傳流程圖

hadoop中各個節點的功能及HDFS檔案上傳流程圖

       Hadoop是一個能夠對大量資料進行分散式處理的軟體框架,實現了Google的MapReduce程式設計模型和框架,能夠把應用程式分割成許多的小的工作單元(塊),並把這些單元放到任何叢集節點上執行。在MapReduce中,一個準備提交執行的應用程式稱為“作業(job)”,而從一個作業劃分出得、運行於各個計算節點的工作單元稱為“任務(task)”。此外,Hadoop提供的分散式檔案系統(HDFS)主要負責各個節點的資料儲存,並實現了高吞吐率的資料讀寫。

  在分散式儲存和分散式計算方面,Hadoop都是用主/從(Master/Slave)架構。在一個配置完整的叢集上,想讓Hadoop這頭大象奔跑起來,需要在叢集中執行一系列後臺(deamon)程式。不同的後臺程式扮演不用的角色,這些角色由NameNode、DataNode、 SecondaryNameNode、JobTracker、TaskTracker組成。其中NameNode、SecondaryNameNode、JobTracker執行在Master節點上,而在每個Slave節點上,部署一個DataNode和TaskTracker,以便 這個Slave伺服器執行的資料處理程式能儘可能直接處理本機的資料。對Master節點需要特別說明的是,在小叢集中,SecondaryNameNode可以屬於某個從節點;在大型叢集中,NameNode和JobTracker被分別部署在兩臺伺服器上。

      我們已經很熟悉這個5個程序,但是在使用的過程中,我們經常遇到問題,那麼該如何入手解決這些問題。那麼首先我們需瞭解的他們的原理和作用。

五個節點分別是:

   Namenode    SecondaryNameNode    DataNode       ResourceManager      NodeManager

1.  Namenode 

        Namenode 管理者檔案系統的Namespace。它維護著檔案系統樹(filesystemtree)以及檔案樹中所有的檔案和資料夾的元資料(metadata)。管理這些資訊的檔案有兩個,分別是Namespace 映象檔案(Namespace image)和操作日誌檔案(edit log),這些資訊被Cache在RAM中,當然,這兩個檔案也會被持久化儲存在本地硬碟。Namenode記錄著每個檔案中各個塊所在的資料節點的位置資訊,但是他並不持久化儲存這些資訊,因為這些資訊會在系統啟動時從資料節點重建。

   namenode結構圖(盜的圖)

 


       客戶端(client)代表使用者與namenode和datanode互動來訪問整個檔案系統。客戶端提供了一些列的檔案系統介面,因此我們在程式設計時,幾乎不用知道datanode和namenode,即可完成我們所需要的功能。

2.  DataNode

      Datanode是檔案系統的工作節點,他們根據客戶端或者是namenode的排程儲存和檢索資料,並且定期向namenode傳送他們所儲存的塊(block)的列表(心跳機制)。

      叢集中的每個伺服器都執行一個DataNode後臺程式,這個後臺程式負責把HDFS資料塊讀寫到本地的檔案系統。當需要通過客戶端讀/寫某個資料時,先由NameNode告訴客戶端去哪個DataNode進行具體的讀/寫操作,然後,客戶端直接與這個DataNode伺服器上的後臺程式進行通訊,並且對相關的資料塊進行讀/寫操作。

3. SecondaryNameNode

        SecondaryNameNode是一個用來監控HDFS狀態的輔助後臺程式。就像NameNode一樣,每個叢集都有一個Secondary  NameNode,並且部署在一個單獨的伺服器上。SecondaryNameNode不同於NameNode,它不接受或者記錄任何實時的資料變化,但是,它會與NameNode進行通訊,以便定期地儲存HDFS元資料的快照。由於NameNode是單點的,通過Secondary  NameNode的快照功能,可以將NameNode的宕機時間和資料損失降低到最小。同時,如果NameNode發生問題,Secondary NameNode可以及時地作為備用NameNode使用。這其中SecondaryNameNode作為NameNode備用節點,切換的過程完全不影響其它節點,舉個栗子:NameNode就相當於皇帝,而SecondaryNameNode相當於東宮太子,皇帝即NameNode出現故障或者死去,東宮太子會立即繼位,下面的大臣(DataNaem)完全感覺不到皇位已經換人了。

4.  ResourceManager   和  NodeManager

   一個為資源管理,另一個為節點管理,顧名思義,一個主要負責資源的管理,另一個負責節點的管理

   ResourceManager 主要完成以下幾個功能:

                 1. 與客戶端互動,處理來自客戶端的請求

                 2. 啟動和管理ApplicationMaster,並在它執行失敗時重新啟動它;資源管理和排程,接收來自ApplicationMaster                       的資源申請請求,併為之分配資源

                3. 管理NodeManager,接收來自NodeManager的資源彙報資訊,並向NodeManager下達管理指令(比如殺死                           Container等)

    NodeManager :

         Node Manager就是Weblogic Server提供的一個Java 程式,可以使讓你在本地域控制檯啟動、關閉、重啟及監管受管Server。Node Manager 允許你從遠端machine控制受管Server。要使用NodeManager的功能,必須在受管Server機             器上啟動Node Manager。

HDFS執行流程圖(圖是盜的)

      首先使用者即客戶端想要上傳檔案,就先要給namenode發個請求,告訴它說我要上傳檔案了(即寫資料),然後namenode會返回一個響應,這個響應是namenode根據自身情況,比如會先查一下namenode裡面還能存資料嗎?能存多少?有幾個datanode能存?(心跳資訊)然後返回一個可以儲存的節點列表,意思是這些裡面能存,但不是能存的datanode全部返回,它會根據上傳檔案的大小來適當的返回,客戶端收到這個列表後,就向根據返回的列表裡面的datanode中寫資料,檔案會分為多個塊(block),寫的過程是以流的方式寫入的,一個塊存入一個DataNode,存完後DataNode就會備份,我們預設的備份數是3,存完後,會告訴namenode說我存完了。這樣就結束了hdfs檔案上傳的流程。


上面那張看不懂的話看這張