本文主要解析 Ambari 服务组件的 metainfo.xml 元素信息具体含义,并以 ZooKeeper 的 metainfo.xml 给出具体分析。
简介
Ambari 中服务的 metainfo.xml 信息至关重要,关乎着服务的发现、安装、依赖、配置等信息。Ambari 定义 HDFS、ZooKeeper 等为 服务(service),定义服务中的角色比如 NameNode、DataNode、ZooKeeper Server、ZooKeeper Client等为组件(component)。
根元素
描述服务的根元素。
元素 |
描述 |
样例 |
name |
服务名称。在包含该服务的堆栈定义中包含的所有服务中,名称必须是惟一的。 |
ZOOKEEPER |
displayName |
服务的显示名称。“添加服务”时的“服务”列显示信息。 |
ZooKeeper |
version |
服务的版本。名称和版本一起唯一地标识服务。“添加服务”时的“版本”列显示信息。 |
3.4.6 |
components |
该服务的组件列表 |
|
osSpecifics |
在特定于操作系统中的服务的包信息 |
|
commandScript |
定义服务级别命令。该命令在客户端的组件实例上执行 |
|
comment |
描述服务的简短描述。“添加服务”时的“描述”列显示信息。 |
提供高可靠分布式协调的统一服务。 |
requiredServices |
集群中应该提供的其它服务(依赖组件) |
|
configuration-dependencies |
配置文件 |
|
restartRequiredAfterRackChange |
更改配置后是否重启服务。当设置为true时,更改配置后,会出现黄色重启提示条。 |
|
configuration-dir |
如果没有“configuration”,则使用此选项指定一个不同的配置目录 |
|
service/components
服务包含多个组件。与组件相关联的字段有:
元素 |
描述 |
样例 |
name |
组件名称 |
ZOOKEEPER_SERVER |
displayName |
组件的显示名称,在“概要”——“组件”中显示的名称。 |
ZooKeeper Server |
category |
组件的类型——Master、SLAVE、CLIENT |
MASTER |
commandScript |
定义应用程序范围的命令。该命令在客户端的组件实例上执行 |
|
cardinality |
实例数 |
MASTER:1-2,Slave:1+ |
reassignAllowed |
件是否可以被重新分配/移动到不同的主机。 |
true / false |
customCommands |
除了标准命令外,一组与组件关联的自定义命令。 |
|
service/osSpecifics
操作系统特定的软件包名称(rpm或deb软件包)
元素 |
描述 |
样例 |
osFamily |
适用该包的操作系统系列 |
any |
packages |
部署服务所需的包的列表 |
|
package/name |
包的名称 |
|
service/commandScript
服务命令脚本
元素 |
描述 |
样例 |
script |
脚本的相对路径 |
|
scriptType |
脚本的类型,目前唯一支持的类型是PYTHON |
|
timeout |
命令的自定义超时——这将取代Ambari默认值 |
|
service/component/dependencies/dependency
元素 |
描述 |
样例 |
name |
它所依赖的组件的名称 |
|
scope |
集群/主机。指定从属组件是否应该出现在同一集群或同一主机中。 |
|
auto-deploy |
命令的自定义超时——这将取代Ambari默认值 |
|
conditions |
存在这种依赖关系的条件。例如,存在配置中的属性。 |
|
service/component/logs
提供日志搜索集成。
元素 |
描述 |
样例 |
logId |
组件的logid |
<log> <logId>hdfs_namenode</logId> <primary>true</primary> </log> |
primary |
是否有主日志id。 |
|
service/component/customCommand
可以将自定义命令添加到组件中。
元素 |
描述 |
样例 |
name |
自定义命令的名称 |
|
commandScript |
实现自定义命令的脚本的详细信息 |
|
commandScript/script |
脚本的相对路径 |
|
commandScript/scriptType |
脚本的类型,目前唯一支持的类型是PYTHON |
|
commandScript/timeout |
命令的自定义超时——这将取代Ambari默认值 |
|
下面以 ZooKeeper 的 metainfo.xml 为例进行解析
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
| <?xml version="1.0"?>
<metainfo> <schemaVersion>2.0</schemaVersion> <services> <service> <!-- 服务名称。在包含该服务的堆栈定义中包含的所有服务中,名称必须是惟一的。--> <name>ZOOKEEPER</name>
<!-- 服务的显示名称。“添加服务”时的“服务”列显示信息。--> <displayName>ZooKeeper</displayName>
<!-- 描述服务的简短描述。“添加服务”时的“描述”列显示信息。--> <comment>提供高可靠分布式协调的统一服务。</comment>
<!-- 服务的版本。名称和版本一起唯一地标识服务。“添加服务”时的“版本”列显示信息。--> <version>3.4.6</version>
<!-- 该服务包含的组件列表,在 Ambari 中,定义 ZooKeeper 是服务,ZooKeeper Server 和 ZooKeeper Client 是组件。--> <components>
<component> <!-- 组件名称 --> <name>ZOOKEEPER_SERVER</name>
<!-- 组件的显示名称,在“概要”——“组件”中显示的名称 --> <displayName>ZooKeeper Server</displayName>
<!-- 组件的类型——Mster、SLAVE、CLIENT--> <category>MASTER</category>
<!-- 实例数--> <cardinality>1+</cardinality>
<!-- 依赖的组件 --> <dependencies> <dependency>
<!-- ZooKeeper Server 依赖 ZooKeeper 的 ZooKeeper client --> <name>ZOOKEEPER/ZOOKEEPER_CLIENT</name>
<!-- 同主机依赖,即在 ZooKeeper Server 所在的主机上必须有 ZooKeeper client。--> <!-- 即使在安装 ZooKeeper 时某个节点只勾选 ZooKeeper server 而不勾选 ZooKeeper client,实际安装时也会在该节点安装 zk client--> <scope>host</scope> <auto-deploy> <enable>true</enable> </auto-deploy> </dependency> </dependencies>
<!-- 在滚动升级时使用其他版本 --> <versionAdvertised>true</versionAdvertised>
<!-- 支持滚动重启 --> <rollingRestartSupported>true</rollingRestartSupported> <commandScript>
<!-- 脚本相对路径--> <script>scripts/zookeeper_server.py</script>
<!-- 脚本的类型,目前唯一支持的类型是PYTHON --> <scriptType>PYTHON</scriptType>
<!-- 命令的自定义超时时间——这将取代Ambari默认值--> <timeout>1200</timeout> </commandScript>
<logs> <log>
<!-- 组件的 logid --> <logId>zookeeper</logId>
<!-- 是否有主日志id。--> <primary>true</primary> </log> </logs> </component>
<component> <name>ZOOKEEPER_CLIENT</name> <displayName>ZooKeeper Client</displayName> <category>CLIENT</category> <cardinality>1+</cardinality> <versionAdvertised>true</versionAdvertised> <commandScript> <script>scripts/zookeeper_client.py</script> <scriptType>PYTHON</scriptType> </commandScript> <configFiles> <configFile> <!--要生成的文件类型,xml或env sh、yaml等--> <type>env</type>
<!-- 生成的文件的名称--> <fileName>zookeeper-env.sh</fileName>
<!-- 包含配置属性的数据字典--> <dictionaryName>zookeeper-env</dictionaryName> </configFile> <configFile> <type>env</type> <fileName>log4j.properties</fileName> <dictionaryName>zookeeper-log4j</dictionaryName> </configFile> </configFiles> </component> </components>
<!-- 适用的系统版本,如果需要适配其他系统,可在此添加,或直接写成 any --> <osSpecifics> <osSpecific> <osFamily>amazonlinux2,redhat6,redhat7,suse11,suse12</osFamily> <packages>
<!-- 安装包包名,即 yum search 时要找到的包,yum 安装时会根据这里的信息找安装包,如果安装包固定,可以直接写固定值--> <package> <name>zookeeper_${stack_version}</name> </package> <package> <name>zookeeper_${stack_version}-server</name> </package> </packages> </osSpecific> <osSpecific> <osFamily>debian7,debian9,ubuntu12,ubuntu14,ubuntu16</osFamily> <packages> <package> <name>zookeeper-${stack_version}</name> </package> <package> <name>zookeeper-${stack_version}-server</name> </package> </packages> </osSpecific> </osSpecifics>
<!-- 服务校验脚本 --> <commandScript> <script>scripts/service_check.py</script> <scriptType>PYTHON</scriptType> <timeout>300</timeout> </commandScript>
<!-- 依赖的配置文件,所有用到的配置文件都要在这里列出,且文件名需保持一致 --> <configuration-dependencies> <config-type>zookeeper-log4j</config-type> <config-type>zookeeper-env</config-type> <config-type>zoo.cfg</config-type> </configuration-dependencies>
<!-- 更改配置后是否重启服务。当设置为 true 时,更改配置后,会出现黄色重启服务提示条。--> <restartRequiredAfterChange>true</restartRequiredAfterChange>
<themes> <theme> <fileName>directories.json</fileName> <default>true</default> </theme> </themes>
</service> </services> </metainfo>
|
源码中服务的 metainfo 文件类似于
ambari-server\src\main\resources\stacks\HDP\3.0\services\ZOOKEEPER\metainfo.xml
这样的路径中,如果存在继承关系,则会放在类似于 ambari-server\src\main\resources\common-services\ZOOKEEPER\3.4.6\metainfo.xml
这样的路径中。
安装后集群后,metainfo 文件在
/var/lib/ambari-server/resources/stacks/HDP/3.0/services/ZOOKEEPER/metainfo.xml
或 /var/lib/ambari-server/resources/common-services/ZOOKEEPER/3.4.6/metainfo.xml
。
在安装后的集群中修改 metainfo.xml 后必须重启 ambari server 才能生效,因为只有在 ambari server 启动时才会加载 resources 目录下相关信息。
参考资料