TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装指导
    • 开启 Kerberos
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • 实验室

    • VIEW插件
    • JIRA速查
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Kylin V10系列
    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装指导
    • 开启 Kerberos
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • 实验室

    • VIEW插件
    • JIRA速查
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Kylin V10系列
    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)
  • 通用部分

    • not set for current OS

      • 解读-不支持操作系统解读
      • 解决-增加系统支持范围(一)
      • 解决-增加系统支持范围(二)
      • 解决-增加系统支持范围(三)
      • 解决-增加系统支持范围(四)
        • 一、章节引导
        • 二、问题由来:组件如何知道支持哪些系统?
        • 三、修改位置与作用
        • 四、修改示例
        • 五、修改原理解析
        • 六、可视化理解:从 family 到 metainfo 的映射链
    • 解决-TLS1.3导致依赖下载失败终极办法
  • SYS-Kylin V10
  • 通用部分
  • not set for current OS
JaneTTR
2025-10-16
目录

解决-增加系统支持范围(四)已完结

version_definition 专题

本章节的修改位置如下:

ambari-server/src/main/resources/version_definition.xsd


# 一、章节引导 终章

经历了前三节的内容,我们已经实现了以下目标:

模块 作用 状态
OSCheck 识别 Kylin 系统类型 ✅ 已完成
os_family.json 建立家族继承关系 ✅ 已完成
repoinfo.xml 增加镜像源定义 ✅ 已完成

至此,Ambari 已能识别 Kylin 系统、展示镜像源,并完成安装流程的前半段。
但还有一个关键问题——组件的系统支持声明。

# 二、问题由来:组件如何知道支持哪些系统?

Ambari 的安装逻辑中,每个组件(如 HDFS、YARN、HBase)都会定义它支持的系统范围。
而这个支持范围不是硬编码在代码里的,而是通过 XSD 架构文件 与 metainfo.xml 动态绑定的。

image-20251015165510347

上图中我们可以看到,在 RedHat 系列的列表中新增了 kylin10。
然而,如果没有在 XSD 文件中注册该系统,Ambari 在解析时仍会报错。

# 三、修改位置与作用

目标文件:

ambari-server/src/main/resources/version_definition.xsd
1

该文件用于约束 Ambari 的 版本定义文件(version_definition.xml) 结构, 同时控制哪些 <os> 与 <repo> 标签被视为合法。

换句话说,只有在此处被定义的系统家族,才能在 Stack 的组件配置中被识别。

# 四、修改示例 family-type 枚举扩展

目标

在 version_definition.xsd 的 family-type 枚举中新增 kylin10,让 Ambari 在解析 Stack/Component 的 OS 支持范围时,将 Kylin 10 识别为合法系统家族。

    
    <xs:simpleType name="family-type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="redhat5"/><!--for test-->
            <xs:enumeration value="centos5"/><!--for test-->
            <xs:enumeration value="centos6"/><!--for test-->
            <xs:enumeration value="redhat6"/><!--for test-->
            <xs:enumeration value="redhat7"/>
            <xs:enumeration value="redhat8"/>
            <xs:enumeration value="redhat9"/>
            <xs:enumeration value="fedora36"/>
            <xs:enumeration value="fedora38"/>
            <xs:enumeration value="redhat-ppc6"/>
            <xs:enumeration value="redhat-ppc7"/>
            <xs:enumeration value="debian10"/>
            <xs:enumeration value="debian11"/>
            <xs:enumeration value="ubuntu20"/>
            <xs:enumeration value="ubuntu22"/>
            <xs:enumeration value="suse11"/>
            <xs:enumeration value="suse12"/>
            <xs:enumeration value="amazonlinux2"/>
            <xs:enumeration value="openeuler22"/>
            <!-- 此处尚未声明 kylin10 -->
        </xs:restriction>
    </xs:simpleType>
    
    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
    
    <xs:simpleType name="family-type">
        <xs:restriction base="xs:string">
            <xs:enumeration value="redhat5"/><!--for test-->
            <xs:enumeration value="centos5"/><!--for test-->
            <xs:enumeration value="centos6"/><!--for test-->
            <xs:enumeration value="redhat6"/><!--for test-->
            <xs:enumeration value="redhat7"/>
            <xs:enumeration value="redhat8"/>
            <xs:enumeration value="redhat9"/>
            <xs:enumeration value="fedora36"/>
            <xs:enumeration value="fedora38"/>
            <xs:enumeration value="redhat-ppc6"/>
            <xs:enumeration value="redhat-ppc7"/>
            <xs:enumeration value="debian10"/>
            <xs:enumeration value="debian11"/>
            <xs:enumeration value="ubuntu20"/>
            <xs:enumeration value="ubuntu22"/>
            <xs:enumeration value="suse11"/>
            <xs:enumeration value="suse12"/>
            <xs:enumeration value="amazonlinux2"/>
            <xs:enumeration value="openeuler22"/>
            <!-- ✅ 新增声明:使 Kylin 10 成为合法的 family 值 -->
            <xs:enumeration value="kylin10"/>
        </xs:restriction>
    </xs:simpleType>
    
    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
    @@
         <xs:enumeration value="amazonlinux2"/>
         <xs:enumeration value="openeuler22"/>
    +    <!-- add kylin family -->
    +    <xs:enumeration value="kylin10"/>
       </xs:restriction>
     </xs:simpleType>
    
    1
    2
    3
    4
    5
    6
    7
    // Make sure to add code blocks to your code group

    为什么必须加在 XSD?

    Ambari 在启动时会用 version_definition.xsd 校验并解析各个 Stack 的 metainfo.xml 与版本定义文件。如果 family-type 中没注册 kylin10,即使前面已经完成 OSCheck、os_family.json、repoinfo.xml 的适配,组件层仍会把 kylin10 视作 非法值而拒绝装配,导致页面或日志报错。

    # 五、修改原理解析

    image-20251015165710517

    每当 Ambari Server 启动时,会进行以下动作:

    1. 加载 XSD 架构 解析 version_definition.xsd,生成内部的类型约束模型。

    2. 解析所有 Stack 目录 包括 stacks/BIGTOP/3.2.0/metainfo.xml 等文件。

    3. 合并组件信息 生成统一的 Stack Metadata JSON,其中每个组件会带上:

      "osSpecifics": ["redhat7", "redhat8", "kylin10"]
      
      1
    4. 比对版本定义 只有 XSD 中注册的枚举值,才会被视为合法系统;未注册的将被忽略或报错。

    # 六、可视化理解:从 family 到 metainfo 的映射链

    image-20251015170114549

    结构链条:

    OSCheck → os_family.json → repoinfo.xml → version_definition.xsd → metainfo.xml
    
    1

    每个环节的作用如下:

    环节 作用说明 关键文件
    OSCheck 系统类型识别(kylin) os_check.py
    os_family.json 家族继承定义(kylin → redhat) os_family.json
    repoinfo.xml 前端镜像源定义(kylin10) repoinfo.xml
    version_definition.xsd 系统合法性注册 version_definition.xsd
    metainfo.xml 组件声明支持系统范围 stacks/*/metainfo.xml
    #Ambari#Kylin V10#OSCheck#os_family.json#repoinfo.xml#version_definition.xsd#源码修复#组件适配
    解决-增加系统支持范围(三)
    解决-TLS1.3导致依赖下载失败终极办法

    ← 解决-增加系统支持范围(三) 解决-TLS1.3导致依赖下载失败终极办法→

    最近更新
    01
    Ambari开启Kerberos认证加密类型错误 Kylin V10
    11-05
    02
    KERBEROS SERVICE CHECK 报错
    11-04
    03
    Test Kerberos Client报错:Failed to kinit
    11-04
    更多文章>
    Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式