由一個STOP命令挖出Ambari如何下發任務
天龍係統部署MINIRDS失敗,重試時,Ambari會對所有已經安裝成功的組件下發一個STOP命令。對這個STOP,處女座的@風煜表示不能忍,so。。。開始啃Ambari源碼之路。。。
ok,這個PUT請求到server端之後,server到底做了什麼呢??
在Ambari中什麼是stage呢,以部署MINIRDS為例,需要部署GLOBALCONFIG,METADB,BAKDB,PERFDB.....等等等等。
這些任務如PERFDB,BAKDB必須依賴METADB,所以部署PERFDB時必須保證METADB部署完成,所以GLOBALCOONFIG、METADB為第一階段,PERFDB,BAKDB為第二階段。
總體來講,stage的任務規劃是按照DAG的方式來實現的。什麼是DAG?
DAG:在圖論中,如果一個有向圖無法從任意頂點出發經過若幹條邊回到該點,則這個圖是一個有向無環圖(DAG圖)。
因為有向圖中一個點經過兩種路線到達另一個點未必形成環,因此有向無環圖未必能轉化成樹,但任何有向樹均為有向無環圖。
如何實現DAG?
在Ambari server算法中,所有的service作為一個結點(即METADB、GLOBALCONFIG),節點間的依賴關係為eage(邊),如PERFDB依賴METADB,所以有一條METADB指向PERFDB的邊。
如何劃分stage?
遍曆所有節點,將入度(指向該節點的邊的個數)為0的節點作為一個stage,並將這些節點從原來哈希表中刪除。
循環直至,所有節點都劃分完畢。
為什麼會給安裝好的組件下發STOP命令呢?
這是Ambari Controller的策略。在ambari server中,每個component都有一個狀態機,當重試時,component狀態為INSTALLED時,controller會向對應狀態機執行STOP命令對應的HOST_SERVICE_COMPONENT_EVENT。
最後更新:2017-04-01 13:39:21