成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hadoop 2.0 Yarn代碼:心跳驅動服務分析

大數據 Hadoop
當RM(ResourcesManager)和NM(NodeManager)陸續將所有模塊服務啟動,最后啟動是NodeStatusUpdater,NodeStatusUpdater將用Hadoop RPC遠程調用ResourcesTrackerService中的函數,進行資源是初始化等操作,為將要運行的Job做好準備。以下主要分析在Job提交之前 RM與NM在心跳的驅動下操作。

主要涉及的java文件

hadoop-yarn-server-resourcemanager下的包

org.apache.hadoop.yarn.server.resourcemanager

ResourceTrackerService.java

org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo

FifoScheduler.java

org.apache.hadoop.yarn.server.resourcemanager.rmnode

RMNodeImpl.java

hadoop-yarn-server-nodemanager下的包

org.apache.hadoop.yarn.server.nodemanager

NodeStatusUpdaterImpl.java

2.代碼分析

各個服務代碼已經啟動,NodeStatusUpdate啟動后開始驅動整個Hadoop運行

1).NodeStatusUpdaterImpl(NodeManager端):

NodeStatusUpdaterImpl一經被啟動,start()函數被調用,進行Hadoop RPC服務端的初始化操作(調用getServer函數創建服務等等)。

start()函數主要依次調用registerWithRM()函數和startStatusUpdater()函數

registerWithRM()函數

設置必要配置信息,和安全認證操作

利用Hadoop RPC遠程調用RM端ResourcesTrackerService下的registerNodeManager()方法,詳細見后面ResourcesTrackerService下的registerNodeManager()代碼分析

startStatusUpdater()函數

創建一個線程,然后啟動,所有操作都在運行while的循環中

設置、獲取和輸出必要配置信息,其中比較重要的調用getNodeStatus()方法,獲取本地Container和本地Node的狀態,以供后面的nodeHeartbeat()方法使用

通過Hadoop RPC遠程調用RM端ResourcesTrackerService下的nodeHeartbeat()函數,用while循環以一定時間間隔向RM發送心跳信息,心跳操作見下面ResourcesTrackerService下nodeHeartbeat()函數

nodeHeartbeat()將返回給NM信息,根據返回的response,根據response返回的信息標記不需要的Container和Application發送相應的FINISH_CONTAINERS和FINISH_APPS給ContainerManager,進行清理操作----詳細見后面的代碼分析

2).ResourceTrackerService(ResourcesManager端):

ResourceTrackerService開頭與NodeStatusUpdaterImpl相似,start()函數被調用,初始化Hadoop RPC服務端,等待遠程來調用ResourceTrackerService中的函數

接上面的NodeStatusUpdaterImpl中對registerNodeManager()和nodeHeartbeat()的Hadoop RPC調用,詳細調用細節見下文

以下分成主要從兩個函數registerNodeManager()和nodeHeartbeat()開始分析,所以分成兩部分---

第一部分:

1).接前文ResourceTrackerService下的registerNodeManager()函數

首先獲取本地的NodeID,還有相應的主機名、端口、請求資源信息。

進行安全認證等輔助操作,檢查NodeID所標記的Node是否"有效".如果“無效”的話,立即返回

Node“有效”說明此Node可用,于是創建RMNode(new RMNodeImpl)來識別這個Node的狀態和監測在這個Node上運行的Container和Application

判斷其是否為新RMNode,如果是則向其發送RMNodeEventType.STARTED

如果不是新的RMNode,則發送RMNodeEventType.RECONNECTED到RMNode,重新連接Node,見附加代碼分析。

最后返回給調用方操作結果。

2).RMNodeImpl:當接收RMNodeEventType.STARTED后(接1)),發生狀態轉移NodeState(NEW→RUNNING),Transition函數被調用

向調度器(FifoScheduler)發送NODE_ADDED。

判斷這個Node是否Inactive,如果在Inactive中則,則先將這個Node移除出Inactive,否則增加ActiveNodes的數目。

3).FifoScheduler:接受NODE_ADDED事件,調用addNode()函數,向RM報告新添加的Node的狀態

addNode函數被調用,首先將接收到的RMNode的NodeID和其相應新創建的SchedulerNode(包含對資源的各種操作)放在ConcurrentHashMap類型的node對象中。

再調用Resources下的addTo()函數,累加Node的資源數量,來計算集群中擁有的資源數量

至此NM端的Node已經添加到RM的管轄范圍下,NM成功注冊到RM

附加代碼分析

附加2).RMNodeImpl:當RMNode接收RMNodeEventType.RECONNECTED(接1)),則保持當前狀態不變(RUNNING或者UNHEALTHY),Transition函數被調用

首先向調度器(FifoScheduler)發送NODE_REMOVED事件,刪除當前Node

然后重新連接操作,如果新連接的Node與上一次斷開的Node為同一個,則直接向調度器發送NODE_ADDED事件,如果兩個Node不是同一個,則更新關于Node的參數,再將新的Node加入ConcurrentHashMap類型的node對象中(與前面FifoScheduler中的是同一個)

最后向新的RMNode發送RMNodeEventType.STARTED

附加3).FifoScheduler:接到NODE_REMOVED事件,調用removeNode()函數

removeNode()函數中,先將此Node上的Container全部Kill掉,通過發送RMContainerEventType.KILL實現,因為現在討論沒有Job運行,所以沒有Container可以Kill

從nodes中移出此Node,最后計算集群資源,將相應Node的資源數量從集群資源總量扣除,完畢

第二部分

1).接前文ResourceTrackerService下的nodeHeartbeat()函數,各個NM已經注冊到RM上,則各個NM開始調用這個函數向RM發送“心跳”保持聯系,另外這里討論的是未提交Job的情況下

獲取所需操作的參數變量,例如NodeStatus、NodeId等

驗證發送這次“心跳的”NM是否已經注冊到RM,若未注冊則返回給NM讓其進行重新(reboot)注冊到RM中(實際上就是讓NodeStatusUpdater跳過此次循環)。

驗證這個NM是否“有效”(有效:主機隊列包含這個NM或者黑名單沒有這個NM),如“無效”,則發送RMNodeEventType.DECOMMISSION到NM相應的RMNode中,并關閉(shutdown)這個NM---下接附加2)

驗證這次“心跳”是否與上一個“心跳”重復或者是不是新的“心跳”,這個通過心跳ID實現,如果重復則輸出心跳重復信息,并且直接返回,如果不是新的心跳,則向RMNode發送RMNodeEventType.REBOOTING,然后返回reboot,讓NM“重啟”(和上面一樣NodeStatusUpdater跳過當此次循環)---下接附加2)

設置新的“心跳”ID,獲取Container和Application的信息

向RMNode發送包含STATUS_UPDATE和Container、Application等信息的RMNodeStatusEvent,然后返回相應設置好的response給調用者。

2).RMNodeImpl:RMNode接收到包含STATUS_UPDATE和Container、Application等信息的RMNodeStatusEvent,RMNodeImpl狀態遷移NodeState(RUNNING→UNHEALTHY或RUNNING→RUNNING),Transition函數被調用

首先從RMNodeStatusEvent獲得必要的變量,然后判斷相應的Node的“健康”情況,如果出現問題,則向調度器NODE_REMOVED,則調度器將此NM從集群管理刪除(詳見第一部分 附加3)),然后發送NODE_UNUSABLE到NodeListManager,將其RMNode放到“unusable”的set集合當中,此時RMNodeImpl的NodeState(RUNNING→UNHEALTHY)

如果“健康” 則順利運行,獲取NM遠程傳過來的關于Container的信息(是在NM端用Hadoop RPC調用nodeHeartbeat()時傳送過來的),

說明:

由于這個地方討論的時候,無Job提交過來,NM端無Container啟動,NM發送到RM的事件里面的裝有Container狀態的List為空,所以只傳送“心跳” 表明NM的活動信息,并沒有實際處理,RM端也無Application處理,接受“心跳”只會向RMNode發送RMNodeCleanContainerEvent事件,清理可能互動的Container(對應的代碼見FifoScheduler下的containerLaunchedOnNode函數)。若詳見處理情況的運行狀態,參見后面的文章:RM與NM代碼_心跳驅動服務分析_2 Container的配置和分配(Job提交)一篇。此時RMNodeImpl的NodeState(RUNNING→RUNNING)

到這為止,RM-NM端的代碼已經啟動完成,RM和NM之間以一定的時間間隔用心跳交互信息,等待Job的提交

附加代碼分析

附加2)RMNodeImpl:當RMNode接收RMNodeEventType.DECOMMISSION),發生狀態轉移NodeState(RUNNING→DECOMMISSIONED),Transition函數被調用,

將DECOMMISSIONED設置為finalState

當接到RMNodeEventType.REBOOTING情況類似,最后將REBOOTING設置為finalState。

分析如下圖,其中白色線為第一部分,初始NM注冊到RM階段,黃色線為第二部分,NM發送“心跳”信息到RM階段

原文鏈接:http://www.cnblogs.com/biyeymyhjob/archive/2012/08/21/2648026.html

【編輯推薦】

 

責任編輯:彭凡 來源: 博客園
相關推薦

2012-05-31 02:54:07

HadoopJava

2014-02-14 15:30:18

HadoopYARN

2018-07-31 14:24:02

HadoopYarn服務框架

2013-05-27 14:05:16

2012-05-28 09:23:40

JavaHadoopApache

2017-03-22 20:21:16

Hadoop框架分布式

2013-01-21 13:22:56

IBMdW

2019-01-07 15:29:07

HadoopYarn架構調度器

2019-08-02 11:28:45

HadoopYARN調度系統

2013-04-28 10:01:28

HDInsightWindows AzuHadoop

2013-11-27 09:21:18

YARNMapReduceHadoop

2013-05-28 09:12:59

Hadoop 2.0

2013-05-27 14:31:34

Hadoop 2.0

2022-09-27 12:00:58

HadoopK8S開源

2015-07-06 10:06:57

網絡分析高級運營分析

2013-05-27 15:12:49

Hadoop 2.0

2012-09-18 09:55:44

Hadoop 2.0

2013-10-30 09:13:35

微軟Hadoop AzurWindows Azu

2015-07-08 09:19:56

HaaSHadoop即服務云端Hadoop

2009-07-20 13:58:07

MySQL JDBC驅
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级大黄色片 | 欧美性大战久久久久久久蜜臀 | 草草草网站 | 免费a国产 | 日本不卡一区二区三区 | 日日碰狠狠躁久久躁96avv | 8x国产精品视频一区二区 | 中文字幕在线不卡播放 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 久久精品国产亚洲一区二区 | 春色av| 91传媒在线观看 | 精品免费国产一区二区三区 | 久久伊人精品一区二区三区 | 免费观看a级毛片在线播放 黄网站免费入口 | 天天影视网天天综合色在线播放 | 久草资源 | 国产成人精品一区二 | 99精品欧美一区二区蜜桃免费 | 国产一级视频在线 | 亚洲播放 | 蜜桃久久 | 亚洲网站在线观看 | 夫妻午夜影院 | 国产成人黄色 | 精品欧美一区二区中文字幕视频 | 亚洲一区二区三区免费视频 | 91麻豆精品国产91久久久资源速度 | 日韩精品二区 | 久久国产亚洲 | 超碰在线亚洲 | 亚洲视频精品在线 | 精品国产一区二区三区久久 | 欧美一区2区三区4区公司 | 国产高清精品在线 | 一区二区在线看 | 日本三级在线网站 | 日韩精品一区二区三区中文在线 | 天天躁日日躁狠狠躁白人 | 在线欧美视频 | 国产片网站 |