上文已经简单介绍了前因,这里我们就最核心的内容:如何做,进行讲解。
二. 集成实现过程详解
Ambari下服务资源的定义结构如下图所示:
|_ 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}
下面就以Elasticsearch服务的集成为例,对所有核心的实现内容逐一讲解,elasticsearch集成项目定义结构如下图所示:
1. metainfo.xml - 服务整体描述
首先,通过metainfo.xml文件对elasticsearch这个服务进行一个标准的描述,完整文件如下所示:
<?xml version="1.0"?>
<metainfo>
<schemaVersion>2.0</schemaVersion>
<services>
<service>
<name>ELASTICSEARCH</name>
<displayName>Elasticsearch</displayName>
<comment>A highly scalable open-source full-text search and analytics engine. Including storage, searching, and analyzing big volumes of data quickly and in near real time. </comment>
<version>6.4.2</version>
<components>
<component>
<name>ELASTICSEARCH_MASTER</name>
<displayName>Elasticsearch Master</displayName>
<category>MASTER</category>
<cardinality>1+</cardinality>
<versionAdvertised>true</versionAdvertised>
<commandScript>
<script>scripts/es_master.py</script>
<scriptType>PYTHON</scriptType>
<timeout>1200</timeout>
</commandScript>
<logs>
<log>
<logId>elasticsearch_master</logId>
<primary>true</primary>
</log>
</logs>
</component>
<component>
<name>ELASTICSEARCH_SLAVE</name>
<displayName>Elasticsearch Slave</displayName>
<category>SLAVE</category>
<cardinality>0+</cardinality>
<versionAdvertised>true</versionAdvertised>
<commandScript>
<script>scripts/es_slave.py</script>
<scriptType>PYTHON</scriptType>
<timeout>1200</timeout>
</commandScript>
<logs>
<log>
<logId>elasticsearch_slave</logId>
<primary>true</primary>
</log>
</logs>
</component>
</components>
<osSpecifics>
<osSpecific>
<osFamily>any</osFamily>
<packages>
<package>
<name>elasticsearch-6.4.2</name> <!-- Not using. Please make sure the os already contains all the dependencies. -->
</package>
</packages>
</osSpecific>
</osSpecifics>
<commandScript>
<script>scripts/service_check.py</script>
<scriptType>PYTHON</scriptType>
<timeout>300</timeout>
</commandScript>
<configuration-dependencies>
<config-type>elasticsearch-config</config-type>
<config-type>elasticsearch-env</config-type>
<config-type>elasticsearch-log4j</config-type>
</configuration-dependencies>
<restartRequiredAfterChange>true</restartRequiredAfterChange>
<quickLinksConfigurations>
<quickLinksConfiguration>
<fileName>quicklinks.json</fileName>
<default>true</default>
</quickLinksConfiguration>
</quickLinksConfigurations>
</service