Ambari自定義Service

一、Ambari基本架構(gòu)

img016.jpg

Ambari Server 會(huì)讀取 Stack 和 Service 的配置文件。當(dāng)用 Ambari 創(chuàng)建服務(wù)的時(shí)候,Ambari Server 傳送 Stack 和 Service 的配置文件以及 Service 生命周期的控制腳本到 Ambari Agent。Agent 拿到配置文件后,會(huì)下載安裝公共源里軟件包(Redhat,就是使用 yum 服務(wù))。安裝完成后,Ambari Server 會(huì)通知 Agent 去啟動(dòng) Service。之后 Ambari Server 會(huì)定期發(fā)送命令到 Agent 檢查 Service 的狀態(tài),Agent 上報(bào)給 Server,并呈現(xiàn)在 Ambari 的 GUI 上。

二、創(chuàng)建Ambari自定義Service

#AmbariServer資源文件在/var/lib/ambari-server/resources目錄
#cd到Ambari Stack目錄下 (目前最新版為2.6)
cd /var/lib/ambari-server/resources/stacks/HDP/2.6/services
#創(chuàng)建自定義Service目錄 (以大寫ServiceName命令,這里以My Service為例)
mkdir MYSERVICE
cd MYSERVICE

1.編輯metainfo.xml

<?xml version="1.0"?>
<metainfo>
 <schemaVersion>2.0</schemaVersion>
 <services>
 <service>
 <!--  -->
 <!-- 編寫Service名稱和Service信息 -->
 <name>MYSERVICE</name>
 <displayName>My Service</displayName>
 <comment>this is comment</comment>
 <version>1.0</version>
 <components>
 <component>
 <!-- 編寫Master組件 -->
 <name>MYMASTER</name>
 <displayName>My Master</displayName>
 <category>MASTER</category>
 <cardinality>1</cardinality>
 <commandScript>
 <script>scripts/master.py</script>
 <scriptType>PYTHON</scriptType>
 <timeout>5000</timeout>
 </commandScript>
 </component>
 <component>
 <!-- 編寫Slave組件 -->
 <name>MYSALVE</name>
 <displayName>My Slave</displayName>
 <category>SLAVE</category>
 <cardinality>1+</cardinality>
 <commandScript>
 <script>scripts/slave.py</script>
 <scriptType>PYTHON</scriptType>
 <timeout>5000</timeout>
 </commandScript>
 </component>
 </components>
 <osSpecifics>
 <osSpecific>
 <osFamily>any</osFamily>
 </osSpecific>
 </osSpecifics>
 </service>
 </services>
</metainfo>
  • components 下編寫多個(gè)組件。
  • category 為組件的角色,支持Master、Slave、和Client
  • cardinality 為節(jié)點(diǎn)數(shù)量,可以為1、1+、或數(shù)值范圍1-2
  • commandScript 為組件生命周期回調(diào)的腳本

2.編寫Master組件生命周期回調(diào)腳本

mkdir -p package/scripts
vim package/scripts/master.py
import sys, os
from resource_management import *
from resource_management.core.exceptions import ComponentIsNotRunning
from resource_management.core.environment import Environment
from resource_management.core.logger import Logger

class Master(Script):
    def install(self, env):
        print "Install My Master"

    def configure(self, env):
        print "Configure My Master"

    def start(self, env):
        print "Start My Master"

    def stop(self, env):
        print "Stop My Master"

    def status(self, env):
        print "Status..."

if __name__ == "__main__":
    Master().execute()

3.編寫Slave組件生命周期回調(diào)腳本

package/scripts/slave.py
import sys, os
from resource_management import *
from resource_management.core.exceptions import ComponentIsNotRunning
from resource_management.core.environment import Environment
from resource_management.core.logger import Logger

class Slave(Script):
    def install(self, env):
        print "Install My Slave"

    def configure(self, env):
        print "Configure My Slave"

    def start(self, env):
        print "Start My Slave"

    def stop(self, env):
        print "Stop My Slave"

    def status(self, env):
        print "Status..."

if __name__ == "__main__":
    Slave().execute()

4.重啟AmbariServer

ambari-server restart

5.加入剛才添加的My Service服務(wù)

  • 在Ambari Web上。點(diǎn)擊Actions-> Add Service 添加My Service服務(wù)


    WX20170728-150942@2x.png

三、豐富自定義Service功能

1.增加Service Check邏輯

在 Service 的 metainfo.xml 中,commandScript 字段就是用來配置 service check 腳本入口。如果一個(gè) Service 的 metainfo.xml 有該字段,那么在 Service 的 Action 列表中就會(huì)出現(xiàn)“Run Service Check”這個(gè)命令。

當(dāng)用戶在 WEB 中點(diǎn)擊“Run Service Check”時(shí),Ambari Server 會(huì)隨機(jī)通知一個(gè)該 Service 所在機(jī)器上的 Agent 進(jìn)程,然后由 Agent 執(zhí)行該 Service check 腳本。

<commandScript>
<script>scripts/master/my_check.py</script>
<scriptType>PYTHON</scriptType> <timeout>300</timeout>
</commandScript>
WX20170728-152404@2x.png

2.增加Service 的配置項(xiàng)

這里需要在Service的metainfo.xml 中增加<configuration-dependencies>字段。該字段就是用來關(guān)聯(lián)一個(gè) Service 與配置項(xiàng)文件入口

每一行<config-type>字段,用來指定一個(gè)配置文件。一個(gè) Service 可以同時(shí)指定多個(gè)配置文件。不過所有的配置文件必須放在 Service 的 configuration 目錄中。

<!-- 以HDFS為例 -->
<metainfo>
  <services>
    <service>
    <!-- 省略... -->
      <configuration-dependencies>
      <!-- 在下面指定配置文件 -->
        <config-type>core-site</config-type>
        <config-type>hdfs-site</config-type>
        <config-type>hadoop-env</config-type>
        <config-type>hadoop-policy</config-type>
        <config-type>hdfs-log4j</config-type>
        <config-type>ranger-hdfs-plugin-properties</config-type>
        <config-type>ssl-client</config-type>
        <config-type>ssl-server</config-type>
        <config-type>ranger-hdfs-audit</config-type>
        <config-type>ranger-hdfs-policymgr-ssl</config-type>
        <config-type>ranger-hdfs-security</config-type>
      </configuration-dependencies>
      <restartRequiredAfterRackChange>true</restartRequiredAfterRackChange>
    </service>
  </services>
</metainfo>
#configuration目錄下的文件:
[root@node1 2.1.0.2.0]# ll configuration/
total 84
-rwxr-xr-x 1 admin root  7948 May 27 10:11 core-site.xml
-rwxr-xr-x 1 admin root 16723 May 27 10:11 hadoop-env.xml
-rwxr-xr-x 1 admin root  6201 May 27 10:11 hadoop-policy.xml
-rwxr-xr-x 1 admin root  8879 May 27 10:11 hdfs-log4j.xml
-rwxr-xr-x 1 admin root  8192 May 27 10:11 hdfs-logsearch-conf.xml
-rwxr-xr-x 1 admin root 19139 May 27 10:11 hdfs-site.xml
-rwxr-xr-x 1 admin root  2627 May 27 10:11 ssl-client.xml
-rwxr-xr-x 1 admin root  2959 May 27 10:11 ssl-server.xml

配置文件中,其實(shí)就是指定了一些鍵值對的屬性,以及一個(gè)描述。當(dāng)在 Ambari 的 WEB 中增加這個(gè) Service 時(shí),Ambari Server 會(huì)讀取這些信息,并顯示到該 service 的配置頁面中(Customize Service 和 config 頁面)。默認(rèn)情況下,如果一個(gè)配置項(xiàng)沒有配置默認(rèn)值,用戶則必須輸入。如果一個(gè)項(xiàng)允許為空,則需要在<property>中增加 require-input="false“的屬性。

3.增加自定義Command

以RebalanceHDFS為例,在Service的metainfo.xml中增加以下內(nèi)容
當(dāng)點(diǎn)擊RebalanceHDFS后 則觸發(fā)scripts/namenode.py腳本

<customCommands>
  <customCommand>
    <name>REBALANCEHDFS</name>
    <background>true</background>
    <commandScript>
      <script>scripts/namenode.py</script>
      <scriptType>PYTHON</scriptType>
    </commandScript>
  </customCommand>
</customCommands>
WX20170728-153212@2x.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • Ambari安裝 1 Ambari簡介 Apache Ambari項(xiàng)目的目的是通過開發(fā)軟件來配置、監(jiān)控和管理had...
    CobubRazor閱讀 5,264評論 2 3
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評論 25 709
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • 我國的中醫(yī)博大精深,講究望聞問切。中醫(yī)看你一眼,就知道你有沒有病!你知道嗎,五官里也藏著危險(xiǎn)信號(hào)和征兆!快來對照看...
    舞動(dòng)幸福888閱讀 238評論 0 0

友情鏈接更多精彩內(nèi)容