ambari-自动构建 stack继承说明

来源:互联网 发布:云南大学 知乎 编辑:程序博客网 时间:2024/05/21 10:55

每个stack版本都应该提供metainfo.xml文件,无论是否从其他stack集成。

<metainfo>  <versions>    <active>true</active>  </versions>  <extends>2.4</extends>  <minJdk>1.7</minJdk>  <maxJdk>1.8</maxJdk></metainfo>

通过stack继承,继承的文件,不同的文件继承类型不同。
1.
properties/stack_features.json
properties/stack_tools.json

这两个文件在子stack中也不应该再进行定义。所以这里用的是2.0.6的properties。

2.
kerberos.json
widgets.json

这两个文件如果子stack定义了,则覆盖父stack的定义。
2.6的stack没有覆盖,所以使用的也是2.0.6的kerberos和widgets定义。

3.
configuration/cluster-env.xml
role_command_order.json

这两个文件如果子stack定义了,会合并父stack的定义。其中role_command_order还会合并所有service层面的文件。

4.
metainfo.xml中定义的项会覆盖父stack定义的项。

5.
hooks目录

子stack会覆盖父stack的定义,如果希望保持父stack的文件,需要将其拷贝到子stack目录。

6.
repos
upgrades

这两个目录不会继承。   

7.
service目录
这个目录有点特殊,有两种继承机制。
第一种是stack_advisor.py会自动继承父stack的脚本;但是剩下的行为由脚本的作者决定。
例如:

    class HDP23StackAdvisor(HDP22StackAdvisor):      def __init__(self):        super(HDP23StackAdvisor, self).__init__()        Logger.initialize_logger()      def getComponentLayoutValidations(self, services, hosts):        parentItems = super(HDP23StackAdvisor, self).getComponentLayoutValidations(services, hosts)                 ...

第二种是service目录的继承机制由service继承决定。默认的如果一个服务没有通过extends声明明确的继承,则服务会从父stack继承。

原创粉丝点击