metainfo.xml定义了Ambari管理Service的一些配置内容,该文件对应Service定义起着至关重要的作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0"?>
<metainfo>
<schemaVersion>2.0</schemaVersion>
<services>
<service>
<name>ELASTICSEARCH</name>
<displayName>ElasticSearch</displayName>
<comment>ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。</comment>
<version>6.2.4</version>
<components>
<component>
<name>MASTER</name>
<displayName>ElasticSearch</displayName>
<category>MASTER</category>
<cardinality>1+</cardinality>
<commandScript>
<script>scripts/master.py</script>
<scriptType>PYTHON</scriptType>
<timeout>600</timeout>
</commandScript>
</component>
</components>

<osSpecifics>
<osSpecific>
<osFamily>any</osFamily>
</osSpecific>
</osSpecifics>

<configuration-dependencies>
<config-type>elastic-env</config-type>
<config-type>elastic-config</config-type>
</configuration-dependencies>

<!--设置为false,配置改变并保存,会提示服务重启-->
<restartRequiredAfterChange>false</restartRequiredAfterChange>

<quickLinksConfigurations>
<quickLinksConfiguration>
<fileName>quicklinks.json</fileName>
<default>true</default>
</quickLinksConfiguration>
</quickLinksConfigurations>
</service>
</services>
</metainfo>

1. 一级目录

Field Usage
name service的名称,该名称必须保障在stack services中是唯一的
displayName 服务在web UI上的显示名
version 该service的版本,版本和名称能够唯一的定义该service,通常该版本为该service软件的版本
components 该service下所依赖的components列表
osSpecifics 该service针对OS的特定package信息,该命令会在component实例中执行
commandScript component组service级别的命令也是支持的
comment 该service的简短注释
requiredServices 所以来的其他services
configuration-dependencies 该service所依赖的配置文件(被其他services拥有的config也要在该列表中指定)
restartRequiredAfterRackChange 是否在rack变更后重启
quickLinksConfigurations-dir 存放快速链接定义文件的目录,默认是quicklinks
quickLinksConfigurations/quickLinksConfiguration/filename 快速链接json文件名
<restartRequiredAfterChange>false</restartRequiredAfterChange> 是否在rack变更后重启

2. service/components

Field Usage
name 组件的名称
displayName 该组件的显示名称
category 该组件的类型:MASTER/SLAVE/CLIENT
commandScript 该命令将会执行当该组件实例化时
cardinality 允许/期待实例化数量
reassignAllowed 该组件是否支持重新分配(reAssigned)/移动(Moved)到另外一个host
versionAdertised 组件是否公布其版本 - 在滚动/快速升级期间使用
timelineAppid Ambari Metrics搜集该组件时的名称
dependencies 该组件所依赖其他组件列表
customCommands 用户自定义命令

组件的customCommands命令,会在ambari管理系统的“服务操作中”展示。

3. service/component/commandScript

Field Usage
script 该script的相对路径
scriptType 该script的类型,当前仅支持PYTHON
timeout 该script的执行超时时间

延伸

4. service/component/dependencies/dependency

Field Usage
name 依赖组件的名称
scope 该scope是否存在同一个cluster/host
auto-deploy 是否自动部署,当不存在时
conditions 判断该依赖是否存在的条件,比如在一个配置中一个属性是否存在

5. service/component/logs

Field Usage
logId 该组件的logId
primary 是否为primary logid

6. service/component/configFiles

Field Usage
type 该配置文件的类型:xml/env sh/yaml
fileName 该生成文件的名称
dictionaryName ambari-server管理该配置文件的路径

7. packages

service / osSpecifics - 特定于操作系统的软件包名称(rpm或deb软件包)

Field What is it used for Sample Values
osFamily the os family for which the package is applicable any => all amazon2015,redhat6,debian7,ubuntu12,ubuntu14,ubuntu16
packages list of packages that are needed to deploy the service <check out HDFS metainfo>
package/name name of the package (will be used by the yum/zypper/apt commands) <packages><package><name>jq</name></package></packages>

在install()方法里面:

1
2
3
4
5
def install(self, env):
# Install packages listed in metainfo.xml
self.install_packages(env)

# 相当于执行yum install jq

8. requiredServices

1
2
3
4
5
6
7
8
9
10
<service>
<!-- 一级并列 -->
<requiredServices>
<service>ZOOKEEPER</service>
<service>HDFS</service>
</requiredServices>
</service>
<!-- 这样的话,安装该服务的前提是ZOOKEEPER和HDFS服务已安装,否则ambari会提示你安装;-->
<!-- 停止ZOOKEEPER或HDFS服务时,会提示该服务可能会受到影响 -->
<!-- 卸载ZOOKEEPER或HDFS服务时,会提示先卸载该服务 -->

参考资料:

【1】Ambari自定义服务集成实战教学(完结):https://www.yuque.com/create17/ambari/miyk6c