TT Bigdata TT Bigdata
首页
GitHub (opens new window)
JaneTTR

JaneTTR

数据酿造智慧,每一滴都是沉淀!
  • Ambari 深度专题

  • Bigtop 方法论

    • Bigtop 深度专题
    • 方法论

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

    • 打包技巧-DEB

    • 打包技巧-RPM

    • 实战-日志与源码解读

    • 其他技巧

  • 自定义集成

  • Ambari Server 与 Web

  • Ambari Metrics

  • Ambari Plus 思考

  • Redis集成实战

  • 通用代码模板

  • 各组件代码

  • 技术专题
  • Bigtop 方法论
  • 方法论
JaneTTR
2025-06-23
目录
一、核心思想:current 软链接+统一脚本
二、主要数据结构说明
1. 组件叶子节点 leaves
2. 分组/别名 aliases
3. 多层服务 locked_contexts
4. 命令级别软链 command_symlinks
三、核心运维流程解读
1. 查询当前版本状态
2. 切换组件到指定版本
3. 列举支持组件与分组
4. 展示已安装所有版本
四、核心 setPackages 代码分解
五、常用命令与实际表格

多版本管理解读-组件级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 检查组件是否受支持
#Bigtop#源码解析#Ambari#Redis#Stack集成
多版本管理解读-全局概览
多版本管理解读-配置级

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

最近更新
01
当前版本 2026/08
08-29
02
把 Ambari Server HA 稳稳地跑起来
08-17
03
从一次启用操作追到主备就绪
08-17
更多文章>
Theme by Vdoing | Copyright © 2017-2026 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式