什麼是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
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.
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的作用和工作過程