Ambari自定义Service

一、Ambari基本架构

Ambari自定义Service_第1张图片
img016.jpg

Ambari Server 会读取 Stack 和 Service 的配置文件。当用 Ambari 创建服务的时候,Ambari Server 传送 Stack 和 Service 的配置文件以及 Service 生命周期的控制脚本到 Ambari Agent。Agent 拿到配置文件后,会下载安装公共源里软件包(Redhat,就是使用 yum 服务)。安装完成后,Ambari Server 会通知 Agent 去启动 Service。之后 Ambari Server 会定期发送命令到 Agent 检查 Service 的状态,Agent 上报给 Server,并呈现在 Ambari 的 GUI 上。

二、创建Ambari自定义Service

#AmbariServer资源文件在/var/lib/ambari-server/resources目录
#cd到Ambari Stack目录下 (目前最新版为2.6)
cd /var/lib/ambari-server/resources/stacks/HDP/2.6/services
#创建自定义Service目录 (以大写ServiceName命令,这里以My Service为例)
mkdir MYSERVICE
cd MYSERVICE

1.编辑metainfo.xml



 2.0
 
 
 
 
 MYSERVICE
 My Service
 this is comment
 1.0
 
 
 
 MYMASTER
 My Master
 MASTER
 1
 
 
 PYTHON
 5000
 
 
 
 
 MYSALVE
 My Slave
 SLAVE
 1+
 
 
 PYTHON
 5000
 
 
 
 
 
 any
 
 
 
 

  • components 下编写多个组件。
  • category 为组件的角色,支持Master、Slave、和Client
  • cardinality 为节点数量,可以为1、1+、或数值范围1-2
  • commandScript 为组件生命周期回调的脚本

2.编写Master组件生命周期回调脚本

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组件生命周期回调脚本

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服务

  • 在Ambari Web上。点击Actions-> Add Service 添加My Service服务


三、丰富自定义Service功能

1.增加Service Check逻辑

在 Service 的 metainfo.xml 中,commandScript 字段就是用来配置 service check 脚本入口。如果一个 Service 的 metainfo.xml 有该字段,那么在 Service 的 Action 列表中就会出现“Run Service Check”这个命令。

当用户在 WEB 中点击“Run Service Check”时,Ambari Server 会随机通知一个该 Service 所在机器上的 Agent 进程,然后由 Agent 执行该 Service check 脚本。



PYTHON 300

2.增加Service 的配置项

这里需要在Service的metainfo.xml 中增加字段。该字段就是用来关联一个 Service 与配置项文件入口

每一行字段,用来指定一个配置文件。一个 Service 可以同时指定多个配置文件。不过所有的配置文件必须放在 Service 的 configuration 目录中。



  
    
    
      
      
        core-site
        hdfs-site
        hadoop-env
        hadoop-policy
        hdfs-log4j
        ranger-hdfs-plugin-properties
        ssl-client
        ssl-server
        ranger-hdfs-audit
        ranger-hdfs-policymgr-ssl
        ranger-hdfs-security
      
      true
    
  

#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

配置文件中,其实就是指定了一些键值对的属性,以及一个描述。当在 Ambari 的 WEB 中增加这个 Service 时,Ambari Server 会读取这些信息,并显示到该 service 的配置页面中(Customize Service 和 config 页面)。默认情况下,如果一个配置项没有配置默认值,用户则必须输入。如果一个项允许为空,则需要在中增加 require-input="false“的属性。

3.增加自定义Command

以RebalanceHDFS为例,在Service的metainfo.xml中增加以下内容
当点击RebalanceHDFS后 则触发scripts/namenode.py脚本


  
    REBALANCEHDFS
    true
    
      
      PYTHON
    
  

你可能感兴趣的:(Ambari自定义Service)