天天看點

Ambari的架構與設計思想

通過三張圖來說明:

第二張架構圖告訴我們:

對外,Ambari提供ambari web,rest api,ambari shell三大方式操作機群;

ambari将叢集的配置、各個服務的配置等資訊存在ambari server端的DB中(比如可以是postgresql);

ambari server與ambari agent的交流走RPC,即agent向server報告心跳,server将command通過response發回給agent,agent本地執行指令,比如:agent端執行相應的python腳本;

ambari有自己的一套監控、告警、鏡像服務,以可插拔的形式供上層服務調用;

第三張架構圖是第二張圖的簡化:

Ambari最重要的一塊就是将各個Hadoop生态圈的元件抽象成一個個服務,Ambari Stack可以看成一個服務集合,比如,Ambari就使用了Hortonworks的Hortonworks Data Platform(HDP)來做為提供服務的服務棧。

這裡簡單介紹一下HDP:

好,回到Ambari的話題。Ambari Stack下面就對應了一個又一個Ambari Service,比如HDFS,那HDFS包含有不同的元件(Datanode,NameNode),這時Ambari又對其進行了抽象:

一個Service由多個ServiceComponent構成,一個ServiceComponent由多個ServiceComponentHost構成:

Service: HDFS, YARN, HBase, etc

ServiceComponent: HDFS.NameNode, YARN.ResourceManager, HBase.RegionServer, etc

ServiceComponentHost: HDFS.NameNode.HostA, YARN.ResourceManager.HostB, etc

對應上面的三種資源,有三種操作:

Operation: Service層面的操作(Install/Start/Stop/Config),一個Operation可以作用于一個或多個Service。

Stage: ServicesComponent層面的操作,根據不同ServicesComponent操作間的依賴關系,一個Operation的所有Task可能被劃分成多個Stage,一個Stage内的多個Task互相沒有依賴,可以并行執行。

Task: ServiceComponentHost層面的操作,為了完成一個Operation,需要為不同的機器配置設定一系列的Task去執行。

需要特别說明的是操作的執行順序:

下圖描述了這三種資源與操作的對應關系:

上述的三個操作抽象是定義态的描述,它們分别對應一個執行态的抽象:

StagePlan: 執行态的Operation,是一個Stage DAG。

Action: 執行态的Stage,由多個Command構成。

Command: 執行态的Task,下發給具體的機器執行。主要有以下幾種:

下圖通過一個具體執行個體(啟動HDFS和YARN服務),展示了其Stage DAG的建構邏輯:

本文轉自 yntmdr 51CTO部落格,原文連結:http://blog.51cto.com/yntmdr/1887563,如需轉載請自行聯系原作者