Ambari Configuration xml
Ambari Configuration xml
了解集成原理
在部署 HDP 集群时,在界面上,会有选择 HDP stack 的版本, 如 : 2.0、2.6、3.0、 3.1 … , 每一个 stack 版本在ambari 节点上都有对应的目录,里面存放着 hdp 各服务,像 hdfs、yarn、 mapreduce、 spark、hbase 这些,stack 版本高的, 服务相对多些。 stack 版本目录具体在 ambari-server 节点的 /var/lib/ambari/server/resources/stacks/HDP 下,用 python 开发的自定义服务脚本就会放到这个目录下

将自定义服务放到指定目录下,只需重启 ambari server 就能在添加服务界面加载出来的自定义服务,ambari 在安装自定义服务的过程中,会将 python 开发的自定义服务脚本分发到 agent 节点上,由 agent 节点的自定义服务脚本来执行安装、部署步骤
等通过 Ambari 安装自定义服务之后,Ambari 会在数据库(如 : MySQL ) 相关表里将自定义服务相关信息进行保存,和记录其它 HDP 服务一样的逻辑
一个自定义服务暂定义为一个项目,项目名称须为大写,使用 Python 编写
该项目框架有些必不可少的文件或目录 :
metainfo.xml文件 : 描述了对整个项目的约束配置,是一个核心文件configuration目录 : 里面放置一个或多个 xml 文件,用于将该服务的配置信息展示在前端页面,也可以在 ambari 页面上对服务的一些配置做更改package目录 : 里面包含 scripts 文件夹,该目录下存放着 python 文件,用于对服务的安装、配置、启动、停止等操作。自定义服务 python 脚本依赖的模块是resource_managementalerts.json文件 : 描述 ambari 对服务的告警设置。告警类型 : WEB、Port、Metric、Aggregate、Scriptquicklinks.json文件 : 用于生成快速链接,实现 url 的跳转 , 可支持多个 url 展示role_command_order.json文件 : 决定各个服务组件之间的启动顺序
如 : Kylin 自定义服务

Configuration 下 Xml 解析
官网文档 : https://cwiki.apache.org/confluence/display/AMBARI/Configuration+support+in+Ambari
property
Java 的 property 结构体 : ambari-server/src/main/java/org/apache/ambari/server/state/PropertyInfo.java
Configuration 下包含 n 个 xml 配置文件 , 每一个 xml 配置文件都代表了一个配置组 , 每个 xml 文件中规定了 service 配置项的名称,value 类型和描述
<configuration supports_final="false" supports_adding_forbidden="true">
<property>
<!-- 配置项名称 必须-->
<name>dfs.https.port</name>
<!-- 配置的默认值 必须-->
<value>50470</value>
<!-- 配置的描述,即鼠标移动到文本框弹出的提示 必须 -->
<description>https 端口</description>
<!-- UI显示名称 可选-->
<display-name>https 端口</display-name>
<!-- 磁盘文件的名称 可选-->
<filename>hdfs-site.xml</filename>
<!-- 删除 property 可选-->
<deleted>false</deleted>
<!--property 是否允许空 默认:false 可选-->
<require-input>true</require-input>
<!-- 配置更改是否需要重新启动 ,
默认: add="false" delete="false" update="false"
可选-->
<on-ambari-upgrade add="true"/>
<!-- stack修改是否重启 merge="true" 可选-->
<on-stack-upgrade merge="true"/>
<!--property 类型,
PASSWORD, USER, UID, GROUP, GID, TEXT,
ADDITIONAL_USER_PROPERTY, NOT_MANAGED_HDFS_PATH,
VALUE_FROM_PROPERTY_FILE, KERBEROS_PRINCIPAL
默认: TEXT 可选-->
<property-type></property-type>
<!-- property 属性集 可选-->
<value-attributes>
<!-- ........... -->
</value-attributes>
<!-- 在堆栈推荐属性 可选-->
<depends-on>
<property>
<type>zoo.cfg</type>
<name>clientPort</name>
</property>
</depends-on>
<!-- 依赖值 可选 -->
<property-depended-by>
<dependedByProperties>
<name>hive.exec.orc.encoding.strategy</name>
<type>hive-site</type>
</dependedByProperties>
</property-depended-by>
<!-- 可选-->
<used-by></used-by>
</property>
</configuration>
property/value-attributes
<!-- 这里规定了属性值的类型为int,最小值为0,最大值为48000 -->
<value-attributes>
<!-- 值类型
boolean/ int/ float/ directory/ directories/ content/
value-list/ user/ password -->
<type>int</type>
<!--是否可复写 true/ false -->
<overridable>true</overridable>
<!-- 空值是否有效 true/ false -->
<empty-value-valid>true</empty-value-valid>
<!-- property是否 ui true/ false -->
<ui-only-property>true</ui-only-property>
<!-- 不可编辑 true / false -->
<read-only>true</read-only>
<!--值是否在安装时可编辑 true/ false -->
<editable-only-at-install></editable-only-at-install>
<!-- property 显示值 true/ false -->
<show-property-name></show-property-name>
<!-- 步长 -->
<increment-step>100</increment-step>
<!-- 可选值 -->
<selection-cardinality>2+</selection-cardinality>
<!-- property 文件名 -->
<property-file-name></property-file-name>
<!-- property文件类型 -->
<property-file-type></property-file-type>
<!-- 条目 -->
<entries>
<entry>
<value>2</value>
</entry>
<!-- ... -->
</entries>
<!-- 隐藏 -->
<hidden></hidden>
<!--条目是否可编辑 true/ false -->
<entries-editable></entries-editable>
<!-- 用户组 -->
<user-groups></user-groups>
<!-- 密钥库是否启用 true/ false -->
<keystore></keystore>
<!-- 最小值 -->
<minimum>0</minimum>
<!-- 最大值 -->
<maximum>48000</maximum>
<!-- 值单位 B/ MB/ ms/ Bytes/ milliseconds -->
<unit></unit>
<!--可见 -->
<visible></visible>
<!-- 复制 -->
<copy></copy>
</value-attributes>
读取配置项的值
在控制脚本中读取用户在页面填写的 instance_name 配置项的值
配置项的配置文件为: configuration/sample.xml
resource_management
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>instance_name</name>
<value>instance1</value>
<description>Instance name for samplesrv</description>
</property>
</configuration>
Python 脚本中的读取方法为:params.py
script : ambari-2.7.6\ambari-common\src\main\python\resource_management\libraries\script\script.py
from resource_management.libraries.script.script import Script
config = Script.get_config()
# config被封装为了字典格式,层级 : configurations/文件名/属性名
instance_name = config['configurations']['sample']['instance_name']
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)