YARN/MRv2 Resource Manager深入剖析—RM总体架构
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/
 
 
 
 
YARN/MRv2 Resource Manager深入剖析—NM管理
 
 
NodeManager管理部分主要由三個服務構成,分別是NMLivelinessMonitor、NodesListManager和ResourceTrackerService,它們共同管理NodeManager的生存周期,接下來我們依次介紹這三個服務。
NMLivelinessMonitor
該服務周期性遍歷所有NodeManager,如果一個NodeManager在一定時間(可通過參數yarn.nm.liveness-monitor.expiry-interval-ms配置,默認為10min)內未匯報心跳信息,則認為它死掉了,它上面所有正在運行的Container將被置為運行失敗(RM不會重新執行這些Container,它只會通過心跳機制告訴對應的AM,由AM決定是否重新執行,如果需要,則AM重新向RM申請資源)。
NodesListManager
NodesListManager維護正常節點和異常節點列表,它管理exlude(類似于黑名單)和inlude(類似于白名單)節點列表,這兩個列表所在的文件分別可通過yarn.resourcemanager.nodes.include-path和yarn.resourcemanager.nodes.exclude-path配置(每個節點host占一行),其中,exlude節點是排外節點,它們無法與RM取得連接(直接在RPC層拋出異常,導致NM死掉),默認情況下,這兩個列表均為空,表示任何節點均可接入RM。最重要的一點是,這兩個文件均可以動態加載。
ResourceTrackerService
ResourceTrackerService負責處理來自各個NodeManager的請求,主要包括兩種請求:注冊和心跳,其中,注冊是NodeManager啟動時發生的行為,請求包中包含節點ID,可用的資源上限等信息,而心跳是周期性 行為,包含各個Container運行狀態,運行的Application列表、節點健康狀況(可通過一個腳本設置),而ResourceTrackerService則為NM返回待釋放的Container列表、Application列表等。
當一個NM啟動時,他所做的第一件事是向RM注冊,這是通過RPC函數ResourceTracker.registerNodeManager()實現的。
NM啟動時候,它會周期性的通過RPC函數ResourceTracker. nodeHeartbeat ()匯報心跳,具體包含各個Container運行狀態、運行的Application列表、節點健康狀況等信息,而RM則位置返回需要釋放的Container列表,Application列表等。
原創文章,轉載請注明:?轉載自董的博客
本文鏈接地址:?http://dongxicheng.org/mapreduce-nextgen/yarnmrv2-resource-manager-nm-manager/
總結
以上是生活随笔為你收集整理的YARN/MRv2 Resource Manager深入剖析—RM总体架构的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 数据结构之线段树
- 下一篇: Hadoop MapReduce容错性分
