YARN:Yet Another Resource Negotiator,它是在Hadoop2.0版本中出現的。YARN是一個集羣資源管理系統,負責集羣的統一管理和調度。
-
類似分佈式操作系統
-
Master/Slave架構
-
管理CPU及Memory
-
運行在YARN上的MR類似一個個應用
一、使用YARN解決了什麼問題
-
解決了NameNode的單點故障問題,可以通過配置NameNode高可用來實現
-
提出了HDFS聯邦,可以實現多個NameNode分別管理不同的目錄,從而實現訪問隔離及橫向擴展
-
把資源管理和應用程序管理分開(分別使用:ResourceManager和ApplicationMaster)
-
具有向後兼容的特點
-
YARN是一個框架管理器,可以把各種計算框架移植到YARN上,統一由YARN進行管理和資源調度(支持的計算框架:MapReduce,Storm,Spark,Flink……)
二、關於YARN基本架構的簡介
在MR1中,JobTrcker有兩個功能:資源管理、作業調用
在YARN中分別使用ResourceManager和ApplicationMaster進程實現上述的兩個功能
ResourceManager:負責完成整個集羣的資源管理和調度
ApplicationMaster:負責應用程序的相關事項
系統中所有應用資源調度的最終決定權由ResourceManager擔當。每個應用的ApplicationMaster實際上是框架指定的庫,其從ResourceManager調度資源並與NodeManager一同執行監控任務,NodeManager會通過心跳信息向ResourcesManager彙報自己所在節點的資源使用情況。
ResourceManager
整個集羣當中只有一個,負責集羣資源的統一管理與調度
它主要功能如下:
-
處理 客戶端的請求
-
監控/啓動ApplicationMaster(每一個應用對應一個ApplicationMaster,一個MR對應一個)
-
監控NodeManager(負責節點資源管理和使用,管理CPU和內存)
-
資源分配和調度
NodeManager:
每個節點有一個,負責資源管理和使用
NodeManager它是框架的代理,負責監控Container資源使用情況並提供類似ResourceManager或者Scheduler之類提供的報告
它主要功能:
-
單個節點上的資源管理與任務管理
-
處理來自ResourceManager的命令
-
處理來自ApplicationMaster的命令
NodeManager與DN在一臺機器,其中NM:資源(CPU、內存);DN:數據
ApplicationMaster
每一個應用程序有一個,負責應用程序的管理和任務調度
它主要功能:
-
數據切分
-
爲應用程序申請資源(向ResourceManager申請),並進一步分配給內部任務
-
任務監控和容錯
ApplicationMastr進程負責接收作業提交,協商首個Container執行應用指定的ApplicationManager(ResourceManager包含Scheduler和ApplicationManager)並提供重啓失敗的ApplicationManager Container的服務
Container
對任務運行環境的抽象
描述一系列信息
-
任務運行資源(節點、CPU、內存)
-
任務啓動命令
-
任務運行環境
把一個應用切分成了多個部分
資源進行隔離,如:某個應用需要2G內存,與其它內存隔離,相互之間不干擾
YARN的工作流程
-
用戶向YARN中的ResourceManager提交應用程序(用戶程序、啓動ApplicationMaster命令、ApplicationMaster程序……)
-
ResourceManager爲應用程序分配Container,接下來與Container所在的NodeManager進行通信,並由NodeManager在Container中啓動對應的ApplicationMaster
-
ApplicationMaster在Resource中進行註冊,然後會爲這個應用程序的各項任務申請資源,並監控其運行狀態直至結束
-
ApplicationMster採用輪詢的方式,基於RPC協議向ResouceManager申請和獲取所需要的資源
-
ApplicationMaster申請到資源後,它會和申請到的Container所對應的NodeManager進行交互通信,同時要求在Container中啓動任務
-
NodeManager爲要啓動的任務準備好運行環境,並把啓動命令寫在一個腳本中,通過這個腳本來運行任務
-
每個任務基於RPC協議向對應的ApplicationMaster彙報自己的運行狀態與進度,保證ApplicationMaster可以實時獲取到任務的運行狀態,這樣就可以在任務運行失敗時重啓任務
-
在應用程序運行完後,對應的ApplicationMaster會與ResourceManager通信要求註銷和關閉自己
三、如何搭建YARN
1.在hadoop的配置文件中新增信息 mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
2.對於yarn-site.xml配置文件進行編輯
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.2.2:8031</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.2.2:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.2.2:8034</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.2.2:8088</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
</property>
注意:
在啓動時可能會報錯如下:
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.
這個時候需要在sbin目錄下對yarn-start.sh和yarn-stop.sh進行編輯,在頭部添加如下信息
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
3.啓動yarn
start-yarn.sh
啓動後可以看到各個節點上有nodeManager,在配置resourceManager的機器上可以看到resourceManager(使用命令jps查看)