1. YARN產生背景
- Hadoop1.x時:MapReduce1.x存在問題:單點故障&節點壓力大不易擴展&不能支持除了MR以外的任務
- MapReduce:Master/Slave架構,一個JobTracker帶多個TaskTracker。
- JobTracker:負責資源管理和作業調度。整個集群中只有一個JobTracker,如果出現故障,整個集群就會崩潰。
- TaskTracker:定期向JT匯報本節點的健康狀況、資源使用情況、作業執行情況;接受到來自JT的命令:啟動/殺死任務。
- 資源利用率&運維成本
- YARN:不同計算框架可以共享同一個HDFS集群上的數據,享受整體的資源調度。
- XXX(Spark/MapReduce/Strom/Flink) on YARN的好處:與其他計算框架共享集群資源,按資源需要分配,進而提高集群資源的利用率。
2. YARN概述
- Yet Another Resource Negotiator
- 通用的資源管理系統
- 為上層應用提供統一的資源調度
3. YARN架構
yarn架構.jpg
- ResourceManager: RM
- 整個集群同一時間提供服務的RM只有一個(生產一般有兩個,一主一備),負責集群資源的統一管理和調度。
- 處理客戶端請求:提交一個作業,殺死一個作業。
- 監控我們的NM,一旦某個NM掛了,那么該NM上運行的任務需要告訴我們的AM來如何進行處理(重啟)。
- NodeManager: NM
- 整個集群中有多個,負責自己本身節點資源管理和使用。
- 定時向RM匯報本節點的資源使用情況。
- 接受并處理來自RM的各種命令:啟動Container。
- 處理來自AM的命令。
- 單個節點的資源管理。
- ApplicationMaster: AM
- 每個應用程序對應一個:MR、Spark、負責應用程序的管理。
- 為應用程序向RM申請資源(core、memory),分配給內部Task處理。
- 需要與NM通信:啟動/停止task,task是運行在container里面,AM也是運行在container里面的。
- Container
- 封裝了CPU、Memory等資源的一個容器。
- 是一個任務運行環境的抽象。
- Client
- 提交作業
- 查詢作業的運行進度
- 殺死作業
4. YARN執行流程
yarn調用流.jpg
5. YARN環境搭建
- mapred-site.xml
<configuration>
<!--告訴MapReduce,任務跑在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<!--告訴yarn的NodeManage用的哪一個-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 啟動YARN相關進程:sbin/start-yarn.sh
- 驗證YARN是否啟動成功
- jps查看
- NodeManager
- ResourceManager
- http://localhost:8088
- jps查看
- 停止YARN相關進程:sbin/stop-yarn.sh
6. 提交作業到YARN執行
- MapReduce作業提交到YARN上運行
- 使用Hadoop MapReduce示例程序:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar
- 啟動MR程序:hadoop jar hadoop-mapreduce-examples-3.1.0.jar pi 1 2
- 使用http://localhost:8088 查看結構