yarn的簡單學習 hadoop集羣中zkfc的作用和工作過程

什麼是yarn?什麼是yarn?如果你想知道什麼是yarn的話,我馬上帶你去研究!

 yarn,全名:Yet Another Resource Negotiator,中文名:另一種資源協調者

 它是hadoop集羣的資源管理系統,從hadoop的第二個版本引入,yarn是新的hadoop資源管理器,因爲代碼需要資源,資源在各個zNode上,所以需要yarn對資源進行管理。

是通用資源管理系統和調度平臺。那如何理解?

資源管理系統:集羣的硬件資源,和程序運行有關   (比如說:內存,CPU)

調度平臺:多個程序同時申請時進行分配(例如:FIFS)

通用:只關心資源,不關心你幹啥(所以說啥子都可以接收,不是隻接收RM的應用程序)(說了這麼多不知道能不能稍微理解一點,不理解沒關係,下面再進行更加深入的瞭解)

(yarn在hadoop下的sbin裏)(Zookeeper記錄數據   watch機制    解決高可用,但不是唯一解決高可用)(爲什麼用yarn,因爲我們要把資源管理剝離出來了)

 

1.Yarn的構架組件

YARN還是經典的主從結構。大體上看,YARN服務由一個ResourceManager(RM)和多個NodeManager(NM)構成,ResourceManager爲主節點(master),NodeManager爲從節點(slave)

yarn一共有三個組件,分別是:(可能下面理解起來沒那麼容易,又是RM,又是Scheduler,又是AM,又是容器的,沒關係,我儘量說的通俗一點)

1.ResourceManager,是集羣資源的仲裁者,它包括兩部分:一個是可插拔式的調度Scheduler,一個是ApplicationManager,用於管理集羣中的用戶作業。(簡單說是總資源的老大,還有兩個小弟SC和AM)

2NodeManager,它是在每個節點上有,管理該節點上的用戶作業和工作流,也會不斷髮送自己Container使用情況給ResourceManager。(簡單說是地方的老大,不斷把容器的使用情況告訴總資源老大)

3.ApplicationMaster,用戶作業生命週期的管理者,它的主要功能就是向ResourceManager(全局的)申請計算資源(Containers)並且和NodeManager交互來執行和監控具體的task。(是每個作業的管理者,工作是向總資源老大申請資源,並和地方老大進行溝通)

(yarn把程序內部管理交個一個applicationMaster的角色)(applicationMaster分配真正的資源,recousManager分配資源)

注:資源都是以Container(容器)作爲資源分配單位

 

 

 詳細講解:

ResourceManager

 

 

 

 Scheduler

 

 

 ApplicationManager

 

 

 

  NodeManager

 

 

 Container

 

 

 

2.Yarn的交互流程

 把🐘放進冰箱要幾步?---->要3步,首先打開冰箱門,接着把🐘放進去,再把冰箱門關上、

那麼Yarn提交一個應用程序要幾步?

1.啓動AM,AM向RM註冊(此時用戶可以通過RM查看應用程序的運行狀態)

2.AM通過RPC協議向RM申請和領取資源

3.AM得到資源,與NM通信,要求它啓動任務

4.NM爲任務設置好運行環境,將任務啓動兵力寫到腳本中,並通過運行腳本啓動任務

5.各個任務通過RPC協議向AM彙報自己的狀態和進度(此時用戶可以通過RPC向AM查看應用程序的運行狀態)

6.運行完成後,AM向RM註銷自己

3.Yarn的集羣部署規劃

理論上Yarn可以部署在任意機器上,但實際上通常把NM和DN部署在同一臺機器上(因爲移動程序比移動數據成本低

 

 

 

4.Yarn的重啓機制

 爲了高可用性,使RM出現單點故障時,使Yarn正常工作

如果RM出現故障重啓後,之前的信息將會消失,正在執行的作業會失敗

所以就有了保留工作和不保留工作的區別:不保留工作RM,只保存APP提交的信息和最終執行狀態;保留工作RM保存APP運行狀態

 5.搭建高可用集羣

 爲實現高可用,我們要消除單點故障。

注:HDFS的HA機制通過雙namenode協調工作,各自保存一份元數據,日誌文件只有一份,只有active的namenode纔可以寫,所有namenode都可以讀。

由zkfailover監控自己所在的namenode,在active的掛掉之後,切換另外一臺,同時防止腦裂現象(第一臺假死,後來又活了)

模擬高可用:

1.active的namenode假死掛掉

2.zkfailover監控到委派新的namenode

3.新的namenode怕第一臺沒死透,在補一刀,通過kill補一刀,如果沒殺死,再調用用戶定義好的程序

4.新的namonode切換狀態,上位成功

 

 開始搭建高可用

1.節點角色規劃

 2.修改hadoop中的core-site-xml文件,實現hadoop高可用

 

 

3.修改hdfs-site.xml文件,配置namenode端口地址和通信方式,指定namenode元數據存放位置,開啓namenode失敗自動切換及配置sshfence

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 4.修改mapred-site.xml 文件,配置MapReduce計算框架爲yarn

 

 

 

 5.修改yarn-site.xml 文件,開啓ResourceManager高可用,執行ResourceManager的端口名稱地址,並配置zookeeper集羣地址

 

 

 

 

 

 

 

 

 

 

 

 5.修改slaves下主機名

 

6.修改hadoop-env.sh ,配置Jdk環境變量

 

 

 7.hosts文件配置如下(在etc下)

 

 

 

 8.修改profile文件配置(在etc下)

 

 

 

 9.修改zoo.cfg文件 輸入:vim /export/servers/zookeeper-3.4.11/conf/zoo.cfg

 

 

6.啓動高可用集羣

1.啓動集羣各個節點的zookeeper服務,輸入:cd /export/servers/zookeeper-3.4.11/bin                      ./zkServer.sh start

 

 2.啓動集羣各個節點監控namenode的管理日誌的journalNode,輸入:hadoop-daemon.sh start journalnode

 

 3.在hadoop-ha-01 節點上格式化namenode,並將格式化後的目錄複製到hadoop-ha-02上,輸入:hadoop namenode -format   (注意個格式化前去刪除,這邊指定在data/目錄下。直接cd 到 data目錄  執行 rm -rf ./*)

在第二臺上同步  輸入:bin/hdfs namenode -bootstrapStandby

4.接下來啓動hafs,ZKFC監聽,yarn,使Hadoop在zookeeper上進行註冊

 

 

 

 測試:namenode1是active    namenode2是standby

 

 殺死1的,發現2變成active了

 

 

 

 yarn一樣

 

 

 

 捋一下步驟:

1.配置主機名以及映射關係(爲了通過主機名訪問)

2.ssh免密登錄(爲了分發的時候不輸入密碼)

3.修改配置文件(爲了實現高可用    core-site.xml   hdfs-site.xml   yarn-site.xml   mapred-site.xml   四大配置文件)

4.修改slaves文件(指定Datanode的節點)

5.指定jdk的地址(修改  hadoop-env.sh)

6.配置hadoop環境變量  (在/etc/profile 下)

7.執行改變(source /etc/profile   使配置文件立刻生效)

8.分發給02,03(爲了使大家一樣)

9.啓動journalnode(journalnode就是活着的往裏寫,準備的讀,三臺都啓動journalnode使能夠互相監控,出現問題時,成功上位,確定主從關係)

10.格式化namenode(使配置生效,讓存儲空間明白該按什麼方式組織存儲數據)

11格式化zkfc(zkfc全名zookeeper故障轉移)

12.主從信息同步(使信息一致能夠完成通信)

13.啓動所有和zkfc

注:通過journalnode確定那臺namenode是activte狀態,並將信息同步到standby狀態的namenode,當發生故障時,通過zkfc完成故障轉移,由zkfc完成將standby狀態的namenode轉變成active

 

 小提示:

1.mapreduce  不利於擴展

 2.Yarn是多主多從,主  ResourceManager (最終仲裁者)  從 nodemanager

3.RM接收作業提交,通過NM分配   資源以容器形式給予

4.applicationMaster也是一個容器

5.scheduler是可插拔組件,在調度時先AM,AM向大哥要資源,AM的得到資源與NM通信

6.NM使用RM命令,啓動容器,監視資源使用情況

7.通常把Nodemanager和DataNode部署在一臺機器上(有數據的地方就可能產生計算,移動程序的成本比移動數據高)HDFS與YARN通常在一起(分配資源找yarn,運行是再把數據拿到yarn太耗成本)

 8.關於高可用------>重啓機制    yarn死掉咋整?用Zookeeper解決單點故障(用監聽和*****)

9.get只能監聽數據變化情況,不能監聽文件變化情況

 

 

 

 

 

 

問題:

1.zookeeper和yarn都是分佈式管理系統,有什麼區別?

1.RM是通過scheduler分配資源還是通過NM分配資源?????

2.如何理解多主多從,即是nodemanager又是nodemanager?

3.resourcemanager和nodemanager和AM有什麼區別?

 

 

 

1.zookeeper是起協調作用,通過watch機制和選舉機制對系統各個節點之間進行協調,統一配置處理,解決高可用問題。而yarn起資源調度作用,對磁盤空間的資源,內存,通訊貸款等資源就緒管理分配。

仍然不太懂的可以看看這篇文章   ---------->    YARN和Zookeeper的區別

2.RM通過NM分配資源

3.RM是老大,NM是地方老大,AM是應用程序老大

 

 

不太理解的Yarn資源調度系統的可以看看這個大佬的       Yarn資源調度系統

不太理解hadoop集羣中zkfc的作用和工作過程的看看這個        hadoop集羣中zkfc的作用和工作過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章