聊聊Ambari的那些事兒

2021-08-01 03:26:59 字數 3298 閱讀 8246

文章結構

本文將從ambari的起源、架構和設計思想聊聊ambari的那些事兒。                            

說起ambari,不得不提下

hortonworks和它的競爭對手們

由於apache社群版的hadoop在面對企業級的應用時存在穩定性、可靠性、效能、易用性等方面的限制,許多公司都對其進行了「二次包裝」,這些公司被稱為hadoop商業發行版提供商。

大浪淘沙,自從10年前(2023年)hadoop誕生到今天(2023年)為止,這一市場已被幾大公司瓜分,國外比較著名的提供商有cloudera、mapr、hortonworks、ibm、amazon等,國內比較著名的提供商有華為、星環科技等。這裡面,目前只有cloudera和hortonworks兩家國外公司有提供不收費的hadoop商業發行版,分別叫做cloudera』s distribution including apache hadoop(簡稱「cdh」)和hortonworks data platform(簡稱「hdp」)。這兩家公司也都提供了相應的集群管理、部署、監控的工具,分別是cloudera manager和ambari。

值得注意的是,cloudera manager要比ambari在年紀上大三歲,但這並不妨礙ambari的快速成長,目前來看,ambari與cloudera manager的功能差距正在迅速縮小,且由於ambari是完全開源的,社群非常活躍,增加了越來越多的企業級的新特性,使得ambari本身變的越來越強大。同時,不少公司也對apache ambari進行了「二次包裝」,將ambari從面向運維轉變成了面向資料服務,未來說不定還會產生「ambari商業發行版提供商」這樣的稱呼。

ambari包羅了大部分hadoop生態系統的元件,並且可以擴充套件到其它傳統服務,這說明它的架構和設計思想有值得我們學**的地方。

這裡我們透過3張不同角度的x光片來看看它的驚奇之處。

第一張架構圖告訴我們:

第二張架構

圖告訴我們:

第三張架構圖是第二張圖的簡化:我們可以從中知道,server與agent的唯一的交流方式是通過rpc,即agent向server報告心跳,server將command通過response發回給agent,agent本地執行命令,比如:agent端執行相應的服務元件啟停的操作。

ambari最重要的設計思想就是

抽象

第一層抽象:資源

在類unix系統中,我們肯定聽說過這樣一句話「一切皆是檔案」,即普通的檔案、目錄、塊裝置、套接字都是以檔案被對待,提供統一的操作模型。在ambari的世界裡,「一切皆是資源」。

舉個例子:

hadoop生態圈的元件被抽象成乙個個服務,ambari stack可以看成一系列服務的集合,每乙個ambari stack下面對應了適配不同系統的ambari service,比如hdfs、hbase等等;每乙個ambari service通常由不同的元件構成,比如hdfs包含有不同的元件datanode、namenode;每乙個元件可能分布在不同的機器上,比如hdfs的乙個datanode在hosta上,另乙個datanode在hostb上。ambari對這些不同層次的物件做了一層抽象,把它們都當作「資源」來看待:

乙個service由多個servicecomponent構成,乙個servicecomponent又由多個servicecomponenthost構成,比如:

上面的service、servicecomponent、servicecomponenthost都是資源的一種型別,在ambari中,有多達74種型別(ambari2.0.0版本)的不同資源(resource),每一種型別都有相應的***resourceprovider提供相應的操作介面,比如clusterresourceprovider,又通過***service來暴露相應資源的rest api,比如clusterservice。這樣一看,對「資源」的增刪改查就比較容易理解了。

第二層抽象:操作

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

需要特別說明的是操作的執行順序,可以將ambari的stage dag模擬成spark計算模型中的rdd dag:

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

上述的三個操作抽象是

定義態的描述,它們分別對應乙個

執行態的抽象

executecommand: 對服務元件執行install/start/stop等操作;

statuscommand: 對服務元件執行死活檢查(由server定期下發);

cancelcommand: 取消其他已經下發的task(當stage中的某個task失敗時);

registrationcommand: 要求agent向server重新註冊(當發現server維護的心跳序號與agent上報的不一致時);

下圖通過乙個具體例項(啟動hdfs和yarn服務),展示了其stage dag的構建邏輯:

stage1全部執行完才可以進行stage2的執行,stage1裡面的task可以並行執行。

這樣的設計模型使得ambari可以支援幾乎所有的元件,做到「包羅萬物」。

本文從乙個側面介紹了ambari的起源、架構和設計思想,誠然,它還有很多設計思想值得我們學**,但筆者了解有限,這裡不再一一贅述,以上如有不妥之處,還望及時指出。

1. 2.

3.

聊聊TPC那些事兒

最近幾天oceanbase tpc h勇奪世界第一的pr宣傳被中文自 先後報道,興奮之餘,筆者也想到,根據這些年對tpc機構以其審計師們的接觸,對tpc benchmark及其審計和發布流程有了一些了解,也聽到一些坊間的逸聞趣事,所以在恭喜oceanbase榮耀奪冠的時候,今天咱們也換個角度隨便聊聊...

聊聊Spring Cloud版本的那些事兒

繼續昨天說的計畫,解惑一下收到比較多的問題。有朋友問 為什麼在很多文章中,大家引用的spring版本名字都不一樣呢?比如 angel.sr6,brixton.sr5等等,它們都有什麼區別呢?今天我們就聊聊這個輕鬆一些的話題,說說spring cloud版本的那些事兒。之前提到過,spring clo...

聊聊Spring Cloud版本的那些事兒

繼續昨天說的計畫,解惑一下收到比較多的問題。有朋友問 為什麼在很多文章中,大家引用的spring版本名字都不一樣呢?比如 angel.sr6,brixton.sr5等等,它們都有什麼區別呢?今天我們就聊聊這個輕鬆一些的話題,說說spring cloud版本的那些事兒。之前提到過,spring clo...