TT Bigdata TT Bigdata
首页
  • 部署专题

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

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

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

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

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

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

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

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

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

    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 支持&共建

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

JaneTTR

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

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

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

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

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

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

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

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

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

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

    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 支持&共建

    • 蓝图愿景
    • 技术支持
    • 合作共建
登陆
GitHub (opens new window)
  • 方法论

    • 补丁的理解与存在意义
    • 补丁实战-IDE的使用
    • 采用RPM或DEB安装解读
    • 多版本管理解读-全局概览
    • 多版本管理解读-组件级
      • 一、核心思想:current 软链接+统一脚本
      • 二、主要数据结构说明
        • 1. 组件叶子节点 leaves
        • 2. 分组/别名 aliases
        • 3. 多层服务 locked_contexts
        • 4. 命令级别软链 command_symlinks
      • 三、核心运维流程解读
        • 1. 查询当前版本状态
        • 2. 切换组件到指定版本
        • 3. 列举支持组件与分组
        • 4. 展示已安装所有版本
      • 四、核心 setPackages 代码分解
      • 五、常用命令与实际表格
    • 多版本管理解读-配置级
    • Gradle命令逆向剖析
  • 组件编译技巧

  • 打包技巧-RPM

  • 实战-日志&源码解读全链路周期

  • 其他技巧

  • GOD-Bigtop
  • 方法论
JaneTTR
2025-06-23
目录

多版本管理解读-组件级distro-select

bigtop 在大数据生态下的多版本管理,核心就是对每个组件/子服务在不同版本下的隔离、切换和统一入口 。这套体系的关键实现就是 bigtop-select/distro-select 工具。

# 一、核心思想:current 软链接+统一脚本

bigtop 各组件都部署在 /usr/bigtop/{version}/{component} 目录, 通过 /usr/bigtop/current/{component} 软链实现“当前生效版本”动态切换。 distro-select 脚本就是实现软链切换、注册、查询等运维动作的主入口。

# 二、主要数据结构说明

# 1. 组件叶子节点 leaves

leaves = {
    'hadoop-client': 'hadoop',
    'hbase-master': 'hbase',
    'redis-master': 'redis',
    'zookeeper-server': 'zookeeper',
    # ... 省略 ...
}
1
2
3
4
5
6
7
  • key:逻辑名/服务名,如 `redis-master
  • value:目录名,如 redis 。

提示

每个 key 都能映射到具体目录,实现所有组件/角色的“多版本登记表”。

value值怎么填

一般情况下 /usr/bigtop/3.2.0/{component}下 截取 {component}即可

# 2. 分组/别名 aliases

aliases = {
    "all": leaves.keys(),
    "client": [
        "hadoop-client", "hbase-client", "redis-client", ...
    ],
    "hadoop-hdfs-server": [
        "hadoop-hdfs-datanode", "hadoop-hdfs-namenode", ...
    ]
}
1
2
3
4
5
6
7
8
9
  • 批量操作(如 client/服务端/全部),简化大规模切换场景。

# 3. 多层服务 locked_contexts

locked_contexts = {
    "hadoop-client": [
        ("hadoop-hdfs-client", "hadoop-hdfs"),
        ("spark-client", "spark"),
        ...
    ]
}

* 解决“主服务一切换,相关子服务也需跟着切换”的场景。

1
2
3
4
5
6
7
8
9
10

# 4. 命令级别软链 command_symlinks

command_symlinks = {
    "hdfs": "hadoop-hdfs-client/../../bin/hdfs",
    "hive": "hive-client/../../bin/hive",
    ...
}
1
2
3
4
5
  • 保证 /usr/bin/hdfs 等命令行入口统一,所有自动化脚本都能稳定找到可用命令。

# 三、核心运维流程解读

# 1. 查询当前版本状态

  • 查看所有或单一组件当前软链指向
distro-select status
distro-select status redis-client
1
2
  • 实现原理:调用 listPackages,遍历 leaves,判断软链实际目录。

image-20250703163927649

# 2. 切换组件到指定版本

  • 典型命令
distro-select set redis-client 3.2.0
1
  • 实现流程

    1. 校验目标版本目录是否存在
    2. 移除旧软链,建立新软链到指定版本
    3. 批量同步“锁定”子服务、命令软链

笔记

这一步自动完成所有层级服务与命令行软链同步,避免因“只换一半”带来脚本失效。

# 3. 列举支持组件与分组

  • 快速查找支持哪些组件或批量别名
distro-select packages
1
  • 输出示例
Packages:
  hadoop-client
  hbase-master
  redis-client
  ...
Aliases:
  all
  client
  ...
1
2
3
4
5
6
7
8
9

image-20250703164100785

# 4. 展示已安装所有版本

  • 查询 bigtop 体系下现有版本
distro-select versions
1
  • 便于多集群/回滚时对比选择

image-20250703164135564

# 四、核心 setPackages 代码分解

def setPackages(packages, version, rpm_mode):
    # 目录存在校验
    target = root + "/" + version + lib_root
    if not os.path.isdir(target):
        # 错误处理
    # 建立 current 软链
    for pkg in packages:
        linkname = current + "/" + pkg
        if os.path.islink(linkname):
            os.remove(linkname)
        os.symlink(target + "/" + leaves[pkg], linkname)
    # 处理锁定子服务
    if pkg in locked_contexts:
        # 子服务也同步切换软链
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 代码保证了主服务、子服务软链原子级批量切换。

# 五、常用命令与实际表格

操作 命令示例 说明
查询全部组件状态 distro-select status 显示所有组件当前版本
设置组件到新版本 distro-select set redis-client 3.2.0 切换 redis 客户端版本
查询支持组件/别名 distro-select packages 输出所有支持的组和别名
列出所有版本 distro-select versions 显示已安装所有版本
检查组件支持性 distro-select supports redis-client 检查组件是否受支持
#Ambari#Redis#Stack集成#大数据运维
多版本管理解读-全局概览
多版本管理解读-配置级

← 多版本管理解读-全局概览 多版本管理解读-配置级→

最近更新
01
bigtop-select 打包缺 compat 报错修复 deb
07-16
02
bigtop-select 打包缺 control 文件报错修复 deb
07-16
03
首次编译-环境初始化 必装
07-16
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式