之前,在 github 上開源了 ambari-Kylin 項目,可離線部署,支持 hdp 2.6+ 及 hdp 3.0+ 。github 地址為:https://github.com/841809077/ambari-Kylin ,歡迎 star 。
這段時間,陸續有不少朋友通過公眾號聯系到我,問我相關的集成步驟。今天正好休息,索性將 ambari 自定義服務集成的原理給大家整理出來。
它其實不難,但是網絡上並沒有多少這方面的資料分享,官方也很少,所以學習門檻就稍微高了一些。但你如果能持續關注我,我相信您能快速上手。
一、簡述 ambari
ambari 是一個可視化管理 Hadoop 生態系統的一個開源服務,像 hdfs、yarn、mapreduce、zookeeper、hive、hbase、spark、kafka 等都可以使用 ambari 界面來統一安裝、部署、監控、告警等。
對於未受 ambari 界面管理的服務,比如 Elasticsearch、Kylin、甚至是一個 jar 包,都可以利用 自定義服務集成相關技術 將 服務 集成到 ambari 界面里。這樣,就可以通過 ambari 實現對 自定義服務 的 安裝、配置、啟動、監聽啟動狀態、停止、指標監控、告警、快速鏈接 等很多操作,極其方便。
二、宏觀了解自定義服務集成原理
對於安裝過 ambari 的朋友可能比較熟悉,我們在部署 hdp 集群的時候,在界面上,會讓我們選擇 hdp stack 的版本,比如有 2.0、... 、2.6、3.0、3.1 等,每一個 stack 版本在 ambari 節點上都有對應的目錄,里面存放着 hdp 各服務,像 hdfs、yarn、mapreduce、spark、hbase 這些,stack 版本高一些的,服務相對多一些。stack 版本目錄具體在 ambari-server 節點的 /var/lib/ambari-server/resources/stacks/HDP 下,我們用 python 開發的自定義服務腳本就會放到這個目錄下。
將自定義服務放到指定目錄下,我們需要重啟 ambari server 才能在 添加服務 界面加載出來我們的自定義服務,ambari 在安裝自定義服務的過程中,也會將 python 開發的自定義服務腳本分發到 agent 節點上,由 agent 節點的 自定義服務腳本 來執行 安裝、部署 步驟。
等通過 ambari 安裝自定義服務之后,ambari 會在數據庫(比如 mysql)相關表里將自定義服務相關信息進行保存,和記錄其它 hdp 服務一樣的邏輯。
三、微觀了解自定義服務集成原理
一個自定義服務暫且將它定義為一個項目,項目名稱須為大寫,使用 python 編寫。該項目框架有那么幾個必不可少的文件或目錄,分別是:
-
metainfo.xml 文件:描述了對整個項目的約束配置,是一個 核心 文件。
-
configuration 目錄:里面放置一個或多個 xml 文件,用於將該服務的配置信息展示在前端頁面,也可以在ambari 頁面上對服務的一些配置做更改,如下圖所示:
-
package 目錄:里面包含 scripts 文件夾,該目錄下存放着 python 文件,用於對服務的安裝、配置、啟動、停止等操作。自定義服務 python 腳本依賴的模塊是 resource_management 。該模塊分布在不同的目錄下,但內容是一致的,如下圖所示:
除了上述必不可少的目錄或文件之外,還有一些文件可以豐富我們自定義服務的功能。比如:
-
alerts.json 文件:描述 ambari 對服務的 告警 設置。告警類型有 WEB、Port、Metric、Aggregate 和 Script ,如下圖所示:
-
quicklinks.json 文件:用於生成快速鏈接,實現 url 的跳轉。可支持多個 url 展示。
-
role_command_order.json 文件:決定各個服務組件之間的啟動順序,詳情可參考:https://841809077.github.io/2018/09/26/role_command_order.html
如下圖所示,這是自定義服務 KYLIN 的項目框架:
四、課程宣傳
ambari 自定義服務集成的細節有很多,但是官方網站上並沒有太多的篇幅去介紹這一塊知識,只能自己慢慢摸索。幸虧有公司的支持和個人的努力,我已經將 自定義服務 的大部分知識點掌握,特繪制相關的知識腦圖,具體如下:
后面我會利用業余時間將上述腦圖中的 12 項錄制成視頻,節約大家學習成本。如果大家有這方面的需求,可以關注我的公眾號,加我好友,一起討論技術與人生。