天天看點

深入了解Hdfs和Yarn架構

目錄

1.中繼資料節點和資料節點

2.合并流程

3.資料的分發遵循就近原則

Yarn

1主從架構

2. ApplicationMaster(AM)

3. NodeManager(NM)

4. Container

中繼資料節點(namenode)用來管理檔案系統的命名空間,它将所有的檔案和檔案夾的中繼資料儲存在一個檔案系統樹中。

資料節點(datanode)就是用來存儲資料檔案的。

從中繼資料節點(secondarynamenode)不是我們所想象的中繼資料節點的備用節點,其實它主要的功能是主要功能就是周期性将中繼資料節點的命名空間鏡像檔案和修改日志合并,以防日志檔案過大。

深入了解Hdfs和Yarn架構

1)首先,Client發起檔案上傳請求,即通過RPC與NameNode建立通訊。

2)NameNode與各DataNode使用心跳機制來擷取DataNode資訊。NameNode收到Client請求後,擷取DataNode資訊,并将可存儲檔案的節點資訊傳回給Client。

3)Client收到NameNode傳回的資訊,與對應的DataNode節點取得聯系,并向該節點寫檔案,寫入檔案被切分成128m大小的資料塊,最後一塊可能不夠128m,一個資料塊裡不能同時存儲2個以上檔案的資料。

4)檔案寫入到DataNode後,以流水線的方式複制到其他DataNode(以3份備援為例,資料塊副本政策為:第一個塊寫入最近的機架上的一台伺服器,第二個塊由第一個塊複制到同一個機架上的另一台主機上,最後一個副本被第二個副本主機複制到不同機架的不同主機上),至于複制多少份,與所配置的hdfs-default.xml中的dfs.replication相關。

深入了解Hdfs和Yarn架構

1、fsimage

記錄某一永久性檢查點(Checkpoint)時整個HDFS的元資訊

2、edits

所有對HDFS的寫操作都會記錄在此檔案中

NameNode的中繼資料資訊先往edits檔案中寫,當edits檔案達到一定的門檻值(3600秒或大小到64M)的時候,會開啟合并的流程。

1.當開始合并的時候,SecondaryNameNode會把edits和fsimage拷貝到自己伺服器所在記憶體中,開始合并,合并生成一個名為fsimage.ckpt的檔案。

2.将fsimage.ckpt檔案拷貝到NameNode上,成功後,再删除原有的fsimage,并将fsimage.ckpt檔案重命名為fsimage。

3.當SecondaryNameNode将edits和fsimage拷貝走之後,NameNode會立刻生成一個edits.new檔案,用于記錄新來的中繼資料,當合并完成之後,原有的edits檔案才會被删除,并将edits.new檔案重命名為edits檔案,開啟下一輪流程。

這裡大家注意,我們帶大家去看linux中hdfs中block塊資料和fsimage和edits的真正存儲路徑是在  $HADOOP_HOME/data/tmp/dfs 中

資料的分發遵循就近原則,block塊對應的機架中的datanode的分布保證安全性流式寫入:

1.将block1分成一個一個的package,将package1發送給DN1

2.DN1接受完package1,自己存一份,再将package1發送給DN2

同時,接收client發送來的package2

3.DN2接收完package1,自己存一份,再将package1發送給DN4

...

4.當block1接收完畢,DN1,DN2,DN4向NN彙報消息(接收完畢),DN1再向client彙報block1接收完畢,于是,client開始發送block2.

主:resourcemanager管理資源,配置設定資源

從節點:nodemanager消耗資源

深入了解Hdfs和Yarn架構

 1.ResourceManager(RM)

RM是一個全局的資料總管,負責整個系統的資源管理和配置設定。它主要由兩個元件構成:排程器(Scheduler)和應用程式管理器(Applications Manager,ASM)。

1)排程器

排程器根據容量、隊列等限制條件(如每個隊列配置設定一定的資源,最多執行一定數量的作業等),将系統中的資源配置設定給各個正在運作的應用程式。

2) 應用程式管理器

應用程式管理器負責管理整個系統中所有應用程式,包括應用程式送出、與排程器協商資源以啟動ApplicationMaster、監控ApplicationMaster運作狀态并在失敗時重新啟動它等。

使用者送出的每個應用程式均包含1個AM,主要功能包括:

與RM排程器協商以擷取資源(用Container表示);

将得到的任務進一步配置設定給内部的任務;

與NM通信以啟動/停止任務;

監控所有任務運作狀态,并在任務運作失敗時重新為任務申請資源以重新開機任務。

目前YARN自帶了兩個AM實作,一個是用于示範AM編寫方法的執行個體程式distributedshell,它可以申請一定數目的Container以并行運作一個Shell指令或者Shell腳本;另一個是運作MapReduce應用程式的AM—MRAppMaster,我們将在第8章對其進行介紹。此外,一些其他的計算架構對應的AM正在開發中,比如Open MPI、Spark等。

NM是每個節點上的資源和任務管理器,一方面,它會定時地向RM彙報本節點上的資源使用情況和各個Container的運作狀态;另一方面,它接收并處理來自AM的Container啟動/停止等各種請求。

Container是YARN中的資源抽象,它封裝了某個節點上的多元度資源,如記憶體、CPU、磁盤、網絡等,當AM向RM申請資源時,RM為AM傳回的資源便是用Container表示的。YARN會為每個任務配置設定一個Container,且該任務隻能使用該Container中描述的資源。

深入了解Hdfs和Yarn架構

 1 使用者向YARN中送出應用程式,其中包括阿程式、啟動ApplicationMaster的指令、使用者程式等。

2 ResourceManager為該應用程式配置設定第一個Container,并與對應的Node-Manager通信,要求它在這個Container中啟動應用程式的ApplicationMaster。

3 ApplicationMaster首先向ResourceManager注冊,這樣使用者可以直接通過ResourceManager檢視應用程式的運作狀态,然後它将為各個任務申請資源,并監控它的運作狀态,直到運作結束,即重複步驟4~7。

4 ApplicationMaster采用輪詢的方式通過RPC協定向ResourceManager申請和領取資源。

5 一旦ApplicationMaster申請到資源後,便與對應的NodeManager通信,要求它啟動任務。

6 NodeManager為任務設定好運作環境(包括環境變量、JAR包、二進制程式等)後,将任務啟動指令寫到一個腳本中,并通過運作該腳本啟動任務。

繼續閱讀