YARN resourceManager解析

在YARN中,ResourceManager負責集羣中所有資源的統一管理和分配,它接收來自各個節點(NodeManager)的資源彙報信息,並把這些信息按照一定的策略分配給各個應用程序(實際上是ApplicationManager)。

ResourceManager主要有四種功能:1.處理來自client的請求

2.啓動和監控ApplicationMaster

3.監控NodeManager

4.集羣中資源的分配和調度

ResourceManager主要由以下幾個部分組成:

用戶交互

YARN分別針對普通用戶,管理員和Web提供了三種對外服務,分別對應ClientRMService、AdminService和WebApp:

ClientRMService

ClientRMService是爲普通用戶提供的服務,它會處理來自客戶端各種RPC請求,比如提交應用程序、終止應用程序,獲取應用程序運行狀態等。

AdminService

YARN爲管理員提供了一套獨立的服務接口,以防止大量的普通用戶請求使管理員發送的管理命令餓死,管理員可通過這些接口管理集羣,比如動態更新節點列表,更新ACL列表,更新隊列信息等。

WebApp

爲了更加友好地展示集羣資源使用情況和應用程序運行狀態等信息,YARN對外提供了一個Web 界面,這一部分是YARN仿照haml(http://haml.info/)開發的一個輕量級嵌入式Web框架。具體討論見:https://issues.apache.org/jira/browse/MAPREDUCE-2399

NM管理

NMLivelinessMonitor

監控NM是否活着,如果一個NodeManager在一定時間(默認爲10min)內未彙報心跳信息,則認爲它死掉了,會將其從集羣中移除。

NodesListManager

維護正常節點和異常節點列表,管理exlude(類似於黑名單)和inlude(類似於白名單)節點列表,這兩個列表均是在配置文件中設置的,可以動態加載。

ResourceTrackerService

處理來自NodeManager的請求,主要包括兩種請求:註冊和心跳,其中,註冊是NodeManager啓動時發生的行爲,請求包中包含節點ID,可用的資源上限等信息,而心跳是週期性 行爲,包含各個Container運行狀態,運行的Application列表、節點健康狀況(可通過一個腳本設置),而ResourceTrackerService則爲NM返回待釋放的Container列表、Application列表等。

AM管理

AMLivelinessMonitor

監控AM是否活着,如果一個ApplicationMaster在一定時間(默認爲10min)內未彙報心跳信息,則認爲它死掉了,它上面所有正在運行的Container將被認爲死亡,AM本身會被重新分配到另外一個節點上(用戶可指定每個ApplicationMaster的嘗試次數,默認是1次)執行。

ApplicationMasterLauncher

與NodeManager通信,要求它爲某個應用程序啓動ApplicationMaster。

ApplicationMasterService

處理來自ApplicationMaster的請求,主要包括兩種請求:註冊和心跳,其中,註冊是ApplicationMaster啓動時發生的行爲,包括請求包中包含所在節點,RPC端口號和tracking URL等信息,而心跳是週期性 行爲,包含請求資源的類型描述、待釋放的Container列表等,而AMS則爲之返回新分配的Container、失敗的Container等信息。

Application管理

ApplicationACLsManager

管理應用程序訪問權限,包含兩部分權限:查看和修改,查看主要指查看應用程序基本信息,而修改則主要是修改應用程序優先級、殺死應用程序等。

RMAppManager

管理應用程序的啓動和關閉。

ContainerAllocationExpirer

YARN不允許AM獲得Container後長時間不對其使用,因爲這會降低整個集羣的利用率。當AM收到RM新分配的一個Container後,必須在一定的時間(默認爲10min)內在對應的NM上啓動該Container, 否則,RM會回收該Container。

安全管理

ResourceManage自帶了非常全面的權限管理機制,主要由ClientToAMSecretManager、ContainerTokenSecretManager、ApplicationTokenSecretManager等模塊完成。

資源分配

ResourceScheduler

ResourceScheduler是資源調度器,它按照一定的約束條件(比如隊列容量限制等)將集羣中的資源分配給各個應用程序,當前主要考慮內存資源,在3.0版本中將會考慮CPU(https://issues.apache.org/jira/browse/YARN-2)。ResourceScheduler是一個插拔式模塊,默認是FIFO實現,YARN還提供了Fair Scheduler和Capacity Scheduler兩個多租戶調度器。

參考資料:

http://hortonworks.com/blog/apache-hadoop-yarn-resourcemanager/

原創文章,轉載請註明: 轉載自董的博客

本文鏈接地址: http://dongxicheng.org/mapreduce-nextgen/yarnmrv2-resource-manager-infrastructure/

作者:Dong,作者介紹:http://dongxicheng.org/about/

發佈了29 篇原創文章 · 獲贊 7 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章