通過三張圖來說明:
第二張架構圖告訴我們:
對外,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,如需轉載請自行聯系原作者