Ambari中添加新服务

官网:

https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=38571133

一、背景

栈的定义可以在源代码树中找到/ambari-server/src/main/resources/stacks。当你安装Ambari Server服务之后,栈的定义可以被发现/var/lib/ambari-server/resources/stacks

二、结构

一个栈的结构定义如下

|_ stacks

   |_ <stack_name>

      |_ <stack_version>

         metainfo.xml

         |_ hooks

         |_ repos

            repoinfo.xml

         |_ services

            |_ <service_name>

               metainfo.xml

               metrics.json

               |_ configuration

                  {configuration files}

               |_ package

                  {files, scripts, templates}

三、定义一个服务和组件

在service里的metainfo.xml文件描述这个服务,服务的组件和管理脚本用于执行命令。一个组件的服务可以是MASTER,SLAVECLIENT类别。这个<category>告诉Ambari默认命令应该用于管理和监控组件。为每个组件指定< commandScript >执行命令时使用。有一个默认命令定义组件必须支持。

aaarticlea/png;base64,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" alt="" />

Ambari支持不同的命令脚本用PYTHON编写的。类型是用来知道如何执行命令脚本。你也可以创建自定义命令除了default lifecycle commands之外你的组件需要去支持。

例如,YARN Service描述ResourceManager组件配置metainfo.xml如下:

<component>
<name>RESOURCEMANAGER</name>
<category>MASTER</category>
<commandScript>
<script>scripts/resourcemanager.py</script>
<scriptType>PYTHON</scriptType>
<timeout>600</timeout>
</commandScript>
<customCommands>
<customCommand>
<name>DECOMMISSION</name>
<commandScript>
<script>scripts/resourcemanager.py</script>
<scriptType>PYTHON</scriptType>
<timeout>600</timeout>
</commandScript>
</customCommand>
</customCommands>
</component>

ResourceManager是一个MASTER组件,并且命令脚本是scripts/resourcemanager.py,可以被找到services/YARN/package目录,PYTHON命令脚本,脚本作为PYTHON方法实现default lifecycle commands。这是默认的安装方法安装命令:

class Resourcemanager(Script):
def install(self, env):
self.install_packages(env)
self.configure(env)

你也可以看到一个自定义的命令定义DECOMMISSION,这意味着还有一个DECOMMISSION方法在python命令脚本:

def decommission(self, env):
import params ... Execute(yarn_refresh_cmd,
user=yarn_user
)
pass

四、使用堆栈继承

栈可以扩展其他堆栈为了分享命令脚本和配置。这样可以减少重复的代码在栈使用以下:

·为子栈定义存储库

·在子栈添加新的服务(不是在父栈)

·覆盖父服务命令脚本

·覆盖父服务的配置

五、例子:实现一个自定义服务

在本例中,我们将创建一个名为“SAMPLESRV”的定制服务,将其添加到现有的栈的定义。

此服务包括MASTER,SLAVE,CLIENT组件。

创建并且添加服务

1.Ambari Server上,浏览到/var/lib/ambari-server/resources/stacks/HDP/2.0.6/services这个目录。在这种情况下,我们将浏览到HDP 2.0的定义。

cd /var/lib/ambari-server/resources/stacks/HDP/2.0./services

2.创建一个目录/var/lib/ambari-server/resources/stacks/HDP/2.0.6/services/SAMPLESRV将包含SAMPLESRV的服务定义。

mkdir /var/lib/ambari-server/resources/stacks/HDP/2.0./services/SAMPLESRV
cd /var/lib/ambari-server/resources/stacks/HDP/2.0./services/SAMPLESRV

3.浏览到新创建的SAMPLESRV目录,创建一个metainfo.xml文件去描述一个新的服务。例如:

<?xml version="1.0"?>
<metainfo>
<schemaVersion>2.0</schemaVersion>
<services>
<service>
<name>SAMPLESRV</name>
<displayName>New Sample Service</displayName>
<comment>A New Sample Service</comment>
<version>1.0.0</version>
<components>
<component>
<name>SAMPLESRV_MASTER</name>
<displayName>Sample Srv Master</displayName>
<category>MASTER</category>
<cardinality>1</cardinality>
<commandScript>
<script>scripts/master.py</script>
<scriptType>PYTHON</scriptType>
<timeout>600</timeout>
</commandScript>
</component>
<component>
<name>SAMPLESRV_SLAVE</name>
<displayName>Sample Srv Slave</displayName>
<category>SLAVE</category>
<cardinality>1+</cardinality>
<commandScript>
<script>scripts/slave.py</script>
<scriptType>PYTHON</scriptType>
<timeout>600</timeout>
</commandScript>
</component>
<component>
<name>SAMPLESRV_CLIENT</name>
<displayName>Sample Srv Client</displayName>
<category>CLIENT</category>
<cardinality>1+</cardinality>
<commandScript>
<script>scripts/sample_client.py</script>
<scriptType>PYTHON</scriptType>
<timeout>600</timeout>
</commandScript>
</component>
</components>
<osSpecifics>
<osSpecific>
<osFamily>any</osFamily> <!-- note: use osType rather than osFamily for Ambari 1.5.0 and 1.5.1 -->
</osSpecific>
</osSpecifics>
</service>
</services>
</metainfo>

4.在上面,我的服务名是"SAMPLESRV"它包含:

·一个MASTER组件“SAMPLESRV_MASTER”

·一个SLAVE组件“SAMPLESRV_SLAVE”

·一个CLIENT组件“SAMPLESRV_CLIENT”

5.接下来,我们创建命令脚本。为命令脚本创建一个目录/var/lib/ambari-server/resources/stacks/HDP/2.0.6/services/SAMPLESRV/package/scripts我们制定的服务metainfo

 mkdir -p /var/lib/ambari-server/resources/stacks/HDP/2.0./services/SAMPLESRV/package/scripts
cd /var/lib/ambari-server/resources/stacks/HDP/2.0./services/SAMPLESRV/package/scripts

6.进入目录并创建.py的命令脚本文件。

例如master.py文件:

import sys
from resource_management import *
class Master(Script):
def install(self, env):
print 'Install the Sample Srv Master';
def stop(self, env):
print 'Stop the Sample Srv Master';
def start(self, env):
print 'Start the Sample Srv Master'; def status(self, env):
print 'Status of the Sample Srv Master';
def configure(self, env):
print 'Configure the Sample Srv Master';
if __name__ == "__main__":
Master().execute()

例如slave.py文件

import sys
from resource_management import *
class Slave(Script):
def install(self, env):
print 'Install the Sample Srv Slave';
def stop(self, env):
print 'Stop the Sample Srv Slave';
def start(self, env):
print 'Start the Sample Srv Slave';
def status(self, env):
print 'Status of the Sample Srv Slave';
def configure(self, env):
print 'Configure the Sample Srv Slave';
if __name__ == "__main__":
Slave().execute()

例如sample_client.py文件

import sys
from resource_management import *
class SampleClient(Script):
def install(self, env):
print 'Install the Sample Srv Client';
def configure(self, env):
print 'Configure the Sample Srv Client';
if __name__ == "__main__":
SampleClient().execute()

7.重启Ambari Server

ambari-server restart

参考网址:

https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=38571133

https://github.com/hortonworks-gallery/ambari-zeppelin-service#option-2-automated-deployment-of-a-fresh-hdp-cluster-that-includes-zeppelin-via-blueprints

https://github.com/Symantec/ambari-cassandra-service

上一篇:20151225jquery学习笔记---折叠菜单UI


下一篇:Android Studio 3依赖配置