TT Bigdata TT Bigdata
首页
  • 产品中心

    • 当前版本
    • 版本矩阵与下载
  • 安装与使用

    • Ambari Plus 安装
      • 安装前准备
        • 实施总览
        • Step0—源码包下载与目录准备
        • Step1—系统源与基础工具准备
        • Step2—集群免密登录
        • Step3—主机名解析同步
        • Step4—Chrony 时间同步
        • Step5—Nginx 本地 Yum 文件服务
        • Step6—JDK 双环境准备
        • Step7—MySQL 驱动与本地仓库
        • Step8—MariaDB 初始化
        • Step9—AmbariServer 初始化
        • 必须 ambari plus 数据库初始化文件
      • 安装部署
        • 初始化集群
    • 组件安装
      • 组件安装总览
      • Solr 安装
      • Ranger 安装
      • Knox 安装
      • HDFS 安装
      • YARN 安装
      • MapReduce2 安装
      • Tez 安装
      • Hive 安装
      • Sqoop 安装
      • HBase 安装
      • Kafka 安装
      • Flink 安装
      • Spark 安装
      • Hue 安装
      • Livy 安装
      • Zeppelin 安装
      • DolphinScheduler 安装
      • Doris 安装
      • Celeborn 安装
      • Ozone 安装
      • Impala 安装
      • Trino 安装
      • Paimon 安装
      • Hudi 安装
      • Atlas 安装
      • Superset 安装
      • Alluxio 安装
    • 开启高可用
      • 开启高可用总览
      • HDFS 开启 HA
      • YARN 开启 HA
    • 权限与审计
      • 权限与审计总览
      • Kerberos 认证启用
      • LDAP 目录接入
    • Ambari Plus Monitor
      • IoTDB 安装与部署
      • 必须 ambari plus monitor 数据库初始化文件
      • Monitor 安装
      • 监控与告警使用
    • 常见问题
      • 安装使用常见问题
  • 发布与支持

    • 更新日志
    • 服务说明
    • 优惠政策
    • 合作共建
    • 蓝图愿景
    • 历史版本
      • 更新日志 · v2.2.3
      • 更新日志 · v2.2.2
      • 更新日志 · v2.2.1
      • 更新日志 · v2.2.0
      • 更新日志 · v2.1.0
      • 更新日志 · v2.0.0
      • 更新日志 · v1.0.7
      • 更新日志 · v1.0.6
      • 更新日志 · v1.0.5
      • 更新日志 · v1.0.4
      • 更新日志 · v1.0.3
      • 更新日志 · v1.0.2
      • 更新日志 · v1.0.1
      • 更新日志 · v1.0.0
  • 会员与访问

    • 专属内容解锁
  • Ambari 安装

    • 常规安装
      • 适用于Ambari3.0.0-kylin V10-aarch64
        • Step0—源码包下载
        • Step1—基础环境准备
        • Step2—免密登录配置
        • Step3—安装JDK-Bisheng
        • Step5—Nginx安装
        • Step6—本地yum源配置
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari3.0.0-kylin V10-x86_64
        • Step0—源码包下载
        • Step1—基础环境准备
        • Step2—免密登录配置
        • Step3—安装JDK17与JDK1.8
        • Step5—Nginx安装
        • Step6—本地yum源配置
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari3.0.0-ubuntu22.04
        • Step0—源码包下载
        • Step1—基础环境准备
        • Step3—安装JDK17与JDK1.8
        • Step4—时间同步(Chrony)
        • Step5—Nginx安装
        • Step6—本地apt源
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari3.0.0-el7
        • Step0—源码包下载
        • Step3—安装JDK17(Ambari 3.0专用)
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari3.0.0-el8
        • Step0—源码包下载
        • Step1—基础环境准备
        • Step3—安装JDK17与JDK1.8
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari2.8.0-el7
        • Step1—基础环境准备
        • Step2—免密登陆认证
        • Step3—安装JDK
        • Step4—时间同步(Chrony)
        • Step5—Nginx安装
        • Step6—本地yum源配置
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web Ui 初始化安装
    • 一键部署
      • Ambari快速部署—3.0.0
        • 【Kylin V10 aarch64】强力卸载脚本
        • 【Kylin V10 aarch64】自动安装脚本
        • 【Kylin V10 x86_64】强力卸载脚本
        • 【Kylin V10 x86_64】自动安装脚本
        • 【Ubuntu22】强力卸载脚本
        • 【Ubuntu22】自动安装脚本
        • 【Rocky8.10】强力卸载脚本
        • 【Rocky8.10】自动安装脚本
        • 【Centos7.9】自动安装脚本
      • Ambari快速部署—2.8.0
        • 【Centos7.9】自动安装脚本
        • 【Centos7.9】强力卸载脚本
      • 数据库环境
        • PostgreSQL 快速安装脚本
      • JDK环境
        • 安装JDK1.8
        • 安装JDK 17
        • 安装JDK1.8-aarch64
        • 安装JDK 17-aarch64
      • MAVEN环境
        • 安装Maven3.8.4
        • 安装Maven3.9.9
      • GRADLE环境
        • 安装Gradle5.6.4
      • CONDA环境
        • 安装Miniconda2
        • 编译Ambari2.8.0——Miniconda3
      • R环境
        • 【Kylin V10 x86_64】安装R 4.4.2
        • 【Ubuntu22】安装R 4.4.2
        • 【Rocky8.10】安装R 4.4.2
        • 【CentOS7】安装R 4.4.2
  • 组件安装

    • 安装指导
    • 魔改分享
      • Phoenix-JDK17下编译的二进制包适用于Datagrip
        • Q: 高版本 DataGrip 无法使用 Phoenix 驱动
        • A: Phoenix - JDK17 制作&下载
    • 最小化安装(简单)
      • Zookeeper 安装
      • Hadoop 安装
      • Yarn安装
      • Hive 安装
      • Spark 安装
      • HBase 安装
      • Kafka 安装
      • Sqoop 安装
      • Flink 安装
      • DolphinScheduler 安装
      • Zeppelin 安装
      • Redis 安装
      • Doris安装
      • Celeborn安装
      • Ozone安装
      • Impala安装
      • Cloudbeaver 安装
      • Ambari Metrics安装
      • Solr安装
      • Ranger 安装
      • Trino安装
      • Paimon安装
      • Hudi安装
      • Atlas 安装
      • Superset 安装
      • Livy 安装
      • Alluxio 安装
      • Hue 安装
      • Knox 安装
    • 进阶安装技巧(需开启Kerberos)
      • Ambari Metrics 进阶安装技巧
      • Atlas 进阶安装技巧
    • 高可用安装(有难度)
      • Zookeeper
      • Hadoop-Namenode
      • Yarn-ResourceManager
      • Hive
      • Hbase
      • Kafka
      • DolphinScheduler
      • Redis
      • Doris
      • Celeborn
      • Ozone
      • Ranger
  • Kerberos 旧版专题

    • 实战 Kerberos
    • 自建 Kerberos
      • KDC服务初始化安装
        • KDC服务初始化安装(RHEL篇)
        • KDC服务初始化安装(Ubuntu篇)
      • 开启Kerberos认证
        • Ambari 中开启 Kerberos 认证流程详解
        • [不看会报错]-Atlas开启准备工作
        • [不看会报错]-Zeppelin开启准备工作
        • [不看会报错]-Impala开启准备工作
        • [不看会报错]-Trino开启准备工作
      • 关闭Kerberos认证
        • Ambari 中关闭 Kerberos 认证流程详解
    • FreeIPA 认证
      • FreeIPA服务端初始化
        • FreeIPA Server 安装指导
      • FreeIPA客户端初始化及Ambari开启IPA认证
        • [Step1]-FreeIPA Client 安装与入域实战
        • [Step2]-FreeIPA 初始化核心用户
        • [Step3]-Ambari 中开启 Kerberos 认证流程详解
        • [Step3-1]-krb5-conf template调整
      • 部分踩坑-问题发现
        • Ambari Server 启动失败:no valid keystore
        • FreeIPA Client 导致 Ambari 权限异常问题排查
      • 部分踩坑-完美解决
        • Ambari Server 启动失败:no valid keystore
      • 辅助测试
        • FreeIPA Client 调试安装速记
        • Ambari Server 证书调试安装速记
    • 其他优化技巧
      • Atlas-Ranger-StringUtils缺失
      • Atlas-Ranger-commons-compress缺失
    • 部分组件踩坑合集
      • Test Kerberos Client报错:Failed to kinit
      • KERBEROS SERVICE CHECK 报错
      • Ambari开启Kerberos认证加密类型错误
      • [开启Kerberos]-Solr启动失败处理
      • [开启Kerberos]-Kafka启动失败处理
      • [开启Kerberos]-Atlas启动-Hbase权限异常
      • [开启Kerberos]-Atlas启动-Solr权限异常
      • [开启Kerberos]-Atlas启动-Kafka权限异常
      • [开启Kerberos]-Hive服务检查异常处理
      • [开启Kerberos]-Trino启动-配置文件处理
      • [开启Kerberos]-Trino启动-缺失PEM证书处理
      • [开启Kerberos]-Trino启动-连接Hive失败
      • [关闭 Kerberos]-Kafka 注销异常
      • [关闭 Kerberos]-Hive 注销异常
      • Kerberos 客户端模板渲染异常处理(临时处理)
      • Kafka 启动兼容 Kerberos 源码级修改
      • Kerberos 客户端模板渲染异常处理(源码修改)
    • 实战技巧
      • Knox 接入 Trino web-ui 解决方案
      • [开启Kerberos]-Trino启动-配置模板
      • [Knox适配]-Trino-474-转发规则魔改
    • 其他技巧
      • Ambari Security 开启步骤
  • Ranger 旧版专题

    • 实战 Ranger
    • Ranger HA 旧发行版
      • 环境准备
        • [Step1] Haproxy 规划与环境安装
      • Kerberos准备
        • [Step2] 统一访问域名的 Kerberos 票据生成
        • [Step3] 调整 Kerberos Client 配置
      • 安装指导
        • [Step4] Ambari页面开启 Ranger Admin 高可用
        • [Step5] 对齐 Ranger HA 的凭证处理
    • Ranger HA ttr-release
      • [Step2] Ranger Admin HA 自动化安装
    • FreeIPA 与 LDAP
      • [Step1] Ambari 安装 Ranger 并配置 FreeIPA + LDAP
      • [Step2] 制作 Ranger Usersync 证书并应用组件
      • [Step3] 制作 Ranger Admin 证书并应用组件
      • [Step4]Ranger HDFS Repository 创建失败修复
      • [Step5]Ranger HBase Repository 创建失败修复
    • 踩坑汇总
      • 调用 Ranger API 返回 403 问题
      • Ranger Admin LDAP 认证报 Bad credentials 分析
    • 解决方案
      • Ranger Admin LDAP 认证报 Bad credentials 处理
      • Ranger HA 虚拟域名 Principal 缺失修复
      • Ranger Usersync 证书快速导入脚本(LDAPS)
      • Ranger Admin 证书快速导入脚本
      • Ranger HDFS Repository 快速处理
      • Ranger HBase / Yarn Repository 快速处理
  • 开发环境

    • Ambari-Env
      • 环境准备
      • 开始使用
    • 工具与镜像
      • Maven镜像加速
      • Gradle镜像加速
      • Node.js 多版本共存方案
      • Npm镜像加速
      • Bower镜像加速
      • R环境安装+一键安装脚本
      • PostgreSQL 快速安装
  • Ambari 编译

    • Ambari 源码编译
    • 前端开发
    • 后端开发
    • Ambari Web本地启动
  • Bigtop 编译

    • 官方组件编译
    • 扩展组件编译
    • 工具与镜像
      • Ivy配置私有镜像仓库
      • APT仓库增量更新
      • Temurin JDK 23快速安装
  • Ambari 深度专题

    • Ambari Server 原理
    • Ambari Metrics 解读
  • Bigtop 方法论

    • Bigtop 深度专题
  • 自定义集成

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 各组件代码
    • 通用代码模板
  • 报错解决

    • Ambari 报错
      • Ambari Views
        • MDEP-187 从根因到修复
        • Loading node labels问题解决
      • Ambari
        • phantomjs下载失败问题
        • 编译问题:GCC 安装与配置
        • bower CERT_HAS_EXPIRED 错误问题
        • Ambari-admin包出现bower install错误
        • Cannot run program "rpmbuild"
        • Python: No such file or directory
        • Yarn解压报错EOFException排查与解决
        • Rpm-maven-plugin与shebang兼容性报错
        • Rpm-maven-plugin 最佳实践
        • Bower install拉取失败解决
        • 缺少 python3 报错解决
        • Python(>=2.6) but is not installed
        • SSL_ERROR_SYSCALL 的修复方法
      • Ambari-infra
        • org.apache.commons.io does not exist
        • maven-compiler-plugin:3.3:compile
        • java.security.InvalidAlgorithmParameterException
        • ambari-infra-solr-plugin依赖报错解决方案
      • Ambari-metrics
        • psutil 缺失与 archive_util 导入错误
        • Ambari-Metrics Monitor 启动失败
        • Ambari-Metrics Monitor 启动失败
        • Ambari-Metrics Monitor 启动失败
        • Ambari-Metrics Monitor 启动失败
    • Bigtop 报错
      • Hadoop
        • /usr/bin/env: python3: No such file or directory 问题
        • error [email protected]: The engine "node" is incompatible with this module 错误
        • CMake 3.1 or higher is required. You are running version 2.8.12.2 错误
        • fuse is needed by hadoop_3_2_0-3.3.4-1.el7.x86_64 错误
        • Cyrus SASL/GSASL 缺失解决
        • Protobuf PROTOC LIBRARY NOTFOUND
        • EVP CIPHER CTX block size 报错
        • TIRPC_INCLUDE_DIRS NOTFOUND解决
        • 缺失 redhat-rpm-config 报错
      • Spark
        • evaluate,httr2,knitr 包不存在解决办法
        • Pandoc 缺失导致 SparkR 构建失败
      • Trino
        • Trino requires Temurin or Oracle JDK for development
        • GLIBC 与 GLIBCXX 版本过低
      • Hudi
        • javax.annotation.Nullable 缺失
        • 缺失 everit-json-schema 依赖
      • Paimon
        • 缺失 Jindo 依赖
      • Livy
        • apache-incubator-disclaimer-resource-bundle 缺失
      • Flink
        • .git can't be found during `prepare`
        • Angular CLI requires Node >=14.15
        • npm run ci-check 报错退出码 3
        • TypeScript 类型声明错误
      • Atlas
        • Atlas 集成 JanusGraph 启动时报 Solr6Index 实例化失败解决
      • Superset
        • urllib3 v2 only supports OpenSSL 1.1.1+
      • Jsvc
        • jsvc 依赖缺失导致 rpm 构建失败
      • Zookeeper
        • ZooKeeper 构建(缺少 hostname 命令)
        • cppunit-devel 依赖缺失解决方案
      • Hive
        • org.apache.logging.slf4j.Log4j.Marker is not public 解决方案
      • Sqoop
        • xmlto is needed by 解决方法
        • lsb_release、rsync 缺失导致构建中断
        • asciidoc 警告与 relnotes.py 语法不兼容分析
      • Cloudbeaver
        • SelectExpressionItem cannot be resolved 报错分析
      • Bigtop-select
        • bigtop-select 打包缺 compat 报错修复
        • bigtop-select 打包缺 control 文件报错修复
      • Knox
        • xmlsectool 依赖缺失问题解析
        • webhdfs-test 依赖收敛冲突问题处理
        • Invalid keystore format 问题处理
        • Knox is not allowed to impersonate admin
        • X-Forwarded-For 406 错误的原因与处理
      • Hue
        • Hue 访问 Hadoop 权限问题
        • Hue 访问 Yarn 权限问题
        • Hue 访问 Impala 时间格式问题
        • requests-kerberos 兼容性问题
        • libmariadb.so.3 缺失导致 syncdb 失败
        • 生产环境下解决方案——Hue/query_api.py
  • 系统适配

    • Kylin V10系列
      • 通用部分
        • not set for current OS
          • 解读-不支持操作系统解读
          • 解决-增加系统支持范围(一)
          • 解决-增加系统支持范围(二)
          • 解决-增加系统支持范围(三)
          • 解决-增加系统支持范围(四)
        • 解决-TLS1.3导致依赖下载失败终极办法
    • Rocky系列
      • 案例-Ambari重启失败
        • 解读-Ambari3.0.0重启失败问题
        • 解决-追加日志锚点
        • 解决-进一步分析与改造[一]
        • 解决-进一步分析与改造[二]
      • 案例-数据库连接问题
        • 解读-安装完毕后出现Unable to load version data from server
      • 案例-日志级别控制问题
        • 解读-Ambari3.0.0无法调整日志输出级别
        • 解决-临时处理日志级别不生效
        • 解决-源码级处理日志不生效
      • 案例-找不到snappy-devel
        • 解决-HDFS报snappy-devel包缺失现象
      • 案例-编译高级功能
        • 解读-开启Hadoop下ISAL-L和PMDK功能
        • 解决-ISAL-L和PMDK功能完整环境包
    • Ubuntu系列
      • 案例-首次编译环境处理
        • 解决-dpkg-buildpackage依赖缺失
        • 解决-devscripts依赖缺失
        • 首次编译-环境初始化
      • 案例-Bigtop适配Debian
        • 解读-bigtop-select支持deb
        • 解决-Step1-解除限制拥抱deb
        • 解决-Step2-补全代码结构
      • 案例-安装中遇到的问题
        • 解读-APT私有镜像验证失败剖析
        • 解决-快速处理APT私有镜像验证失败问题
      • 案例-编译高级功能
        • 解读-开启Hadoop下ISAL-L和PMDK功能
        • 解决-ISAL-L和PMDK功能完整环境包
    • Centos系列
    • OpenEuler系列
  • 监控与调优

    • Ambari-Metrics插件
    • Infinity插件
      • 准备工作
        • Ambari-Metrics插件失效原因
        • Infinity 插件选择与安装小技巧
        • Grafana9.3.2+Infinity2.3.1
          • Grafana快速安装Infinity插件
        • Grafana11.5.2+Infinity3.4.1
          • Grafana快速安装Infinity插件
      • 创建最简DEMO
        • Grafana9.3.2+Infinity2.3.1
          • 快速创建一个简单demo
          • Panel JSON 配置示例
        • Grafana11.5.2+Infinity3.4.1
          • 快速创建一个简单demo
          • Panel JSON 配置示例
    • 组件配置调优
      • HDFS
        • [0001]访问 HDFS Web UI Logs Unauthorized 失败
        • [0001]>>>>>>Hadoop管理员配置优化
      • RANGER
        • [0002]Ranger 审计日志时间与系统时间不一致调整
        • [0002]>>>>>日期统一规则调优
        • [0001]Resource lookup fail 线程池超时优化
        • [0001]>>>>>>线程池与超时参数调优
    • 组件调优指南
    • 1v1指导调优
  • BUG临时处理

    • 版本-v2.2.2-以前
      • [22213]Ambari 3.0.0 滚动重启只执行一台主机修复
      • [22213]解决办法
      • [22212]Ambari 3.0.0 左侧服务菜单滚动条缺失修复
      • [22212]解决办法
      • [22211]Atlas 缺失 __AtlasUserProfile
      • [22211]解决办法
      • [22210]Atlas Hook 无权限访问 Kafka Topic
      • [22210]解决办法
      • [22209]Ranger Kafka Lookup 缺少 JAAS 配置
      • [22209]解决办法
      • [22208]Atlas Hook 消费 Kafka 报错
      • [22208]解决办法
      • [22207]Hue 内访问 SparkSql 失败
      • [22207]解决办法
      • [22206]Ranger 调用 Knox Topologies 失败
      • [22206]解决办法
      • [22205]Ranger Admin 轮刷ZK 缺失 JAAS
      • [22205]解决办法
      • [22204]KNOX policymgr-ssl 启动告警
      • [22204]解决办法
      • [22203]Hue 服务启动后秒退
      • [22203]解决办法
      • [22202]Hue 启动失败: hadoop 用户不存在
      • [22202]解决办法
      • [22201]Hive 使用 Tez 引擎插入数据失败
      • [22201]解决办法
    • 版本-v2.1.0-以前
      • Sqlline 启动卡死问题处理
  • 实验室

    • VIEW插件
      • CAPACITY-SCHEDULER-VIEW
        • Ambari CAPACITY-SCHEDULER 插件安装详解
      • FILE-VIEW
        • Ambari FILE-VIEW 插件安装详解
    • JIRA速查
    • 虚拟环境思路
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 产品中心

    • 当前版本
    • 版本矩阵与下载
  • 安装与使用

    • Ambari Plus 安装
      • 安装前准备
        • 实施总览
        • Step0—源码包下载与目录准备
        • Step1—系统源与基础工具准备
        • Step2—集群免密登录
        • Step3—主机名解析同步
        • Step4—Chrony 时间同步
        • Step5—Nginx 本地 Yum 文件服务
        • Step6—JDK 双环境准备
        • Step7—MySQL 驱动与本地仓库
        • Step8—MariaDB 初始化
        • Step9—AmbariServer 初始化
        • 必须 ambari plus 数据库初始化文件
      • 安装部署
        • 初始化集群
    • 组件安装
      • 组件安装总览
      • Solr 安装
      • Ranger 安装
      • Knox 安装
      • HDFS 安装
      • YARN 安装
      • MapReduce2 安装
      • Tez 安装
      • Hive 安装
      • Sqoop 安装
      • HBase 安装
      • Kafka 安装
      • Flink 安装
      • Spark 安装
      • Hue 安装
      • Livy 安装
      • Zeppelin 安装
      • DolphinScheduler 安装
      • Doris 安装
      • Celeborn 安装
      • Ozone 安装
      • Impala 安装
      • Trino 安装
      • Paimon 安装
      • Hudi 安装
      • Atlas 安装
      • Superset 安装
      • Alluxio 安装
    • 开启高可用
      • 开启高可用总览
      • HDFS 开启 HA
      • YARN 开启 HA
    • 权限与审计
      • 权限与审计总览
      • Kerberos 认证启用
      • LDAP 目录接入
    • Ambari Plus Monitor
      • IoTDB 安装与部署
      • 必须 ambari plus monitor 数据库初始化文件
      • Monitor 安装
      • 监控与告警使用
    • 常见问题
      • 安装使用常见问题
  • 发布与支持

    • 更新日志
    • 服务说明
    • 优惠政策
    • 合作共建
    • 蓝图愿景
    • 历史版本
      • 更新日志 · v2.2.3
      • 更新日志 · v2.2.2
      • 更新日志 · v2.2.1
      • 更新日志 · v2.2.0
      • 更新日志 · v2.1.0
      • 更新日志 · v2.0.0
      • 更新日志 · v1.0.7
      • 更新日志 · v1.0.6
      • 更新日志 · v1.0.5
      • 更新日志 · v1.0.4
      • 更新日志 · v1.0.3
      • 更新日志 · v1.0.2
      • 更新日志 · v1.0.1
      • 更新日志 · v1.0.0
  • 会员与访问

    • 专属内容解锁
  • Ambari 安装

    • 常规安装
      • 适用于Ambari3.0.0-kylin V10-aarch64
        • Step0—源码包下载
        • Step1—基础环境准备
        • Step2—免密登录配置
        • Step3—安装JDK-Bisheng
        • Step5—Nginx安装
        • Step6—本地yum源配置
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari3.0.0-kylin V10-x86_64
        • Step0—源码包下载
        • Step1—基础环境准备
        • Step2—免密登录配置
        • Step3—安装JDK17与JDK1.8
        • Step5—Nginx安装
        • Step6—本地yum源配置
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari3.0.0-ubuntu22.04
        • Step0—源码包下载
        • Step1—基础环境准备
        • Step3—安装JDK17与JDK1.8
        • Step4—时间同步(Chrony)
        • Step5—Nginx安装
        • Step6—本地apt源
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari3.0.0-el7
        • Step0—源码包下载
        • Step3—安装JDK17(Ambari 3.0专用)
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari3.0.0-el8
        • Step0—源码包下载
        • Step1—基础环境准备
        • Step3—安装JDK17与JDK1.8
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web UI 初始化安装
        • [快速安装]—脚本极速部署
      • 适用于Ambari2.8.0-el7
        • Step1—基础环境准备
        • Step2—免密登陆认证
        • Step3—安装JDK
        • Step4—时间同步(Chrony)
        • Step5—Nginx安装
        • Step6—本地yum源配置
        • Step7—Mariadb初始化
        • Step8—AmbariServer初始化
        • Step9—Ambari Web Ui 初始化安装
    • 一键部署
      • Ambari快速部署—3.0.0
        • 【Kylin V10 aarch64】强力卸载脚本
        • 【Kylin V10 aarch64】自动安装脚本
        • 【Kylin V10 x86_64】强力卸载脚本
        • 【Kylin V10 x86_64】自动安装脚本
        • 【Ubuntu22】强力卸载脚本
        • 【Ubuntu22】自动安装脚本
        • 【Rocky8.10】强力卸载脚本
        • 【Rocky8.10】自动安装脚本
        • 【Centos7.9】自动安装脚本
      • Ambari快速部署—2.8.0
        • 【Centos7.9】自动安装脚本
        • 【Centos7.9】强力卸载脚本
      • 数据库环境
        • PostgreSQL 快速安装脚本
      • JDK环境
        • 安装JDK1.8
        • 安装JDK 17
        • 安装JDK1.8-aarch64
        • 安装JDK 17-aarch64
      • MAVEN环境
        • 安装Maven3.8.4
        • 安装Maven3.9.9
      • GRADLE环境
        • 安装Gradle5.6.4
      • CONDA环境
        • 安装Miniconda2
        • 编译Ambari2.8.0——Miniconda3
      • R环境
        • 【Kylin V10 x86_64】安装R 4.4.2
        • 【Ubuntu22】安装R 4.4.2
        • 【Rocky8.10】安装R 4.4.2
        • 【CentOS7】安装R 4.4.2
  • 组件安装

    • 安装指导
    • 魔改分享
      • Phoenix-JDK17下编译的二进制包适用于Datagrip
        • Q: 高版本 DataGrip 无法使用 Phoenix 驱动
        • A: Phoenix - JDK17 制作&下载
    • 最小化安装(简单)
      • Zookeeper 安装
      • Hadoop 安装
      • Yarn安装
      • Hive 安装
      • Spark 安装
      • HBase 安装
      • Kafka 安装
      • Sqoop 安装
      • Flink 安装
      • DolphinScheduler 安装
      • Zeppelin 安装
      • Redis 安装
      • Doris安装
      • Celeborn安装
      • Ozone安装
      • Impala安装
      • Cloudbeaver 安装
      • Ambari Metrics安装
      • Solr安装
      • Ranger 安装
      • Trino安装
      • Paimon安装
      • Hudi安装
      • Atlas 安装
      • Superset 安装
      • Livy 安装
      • Alluxio 安装
      • Hue 安装
      • Knox 安装
    • 进阶安装技巧(需开启Kerberos)
      • Ambari Metrics 进阶安装技巧
      • Atlas 进阶安装技巧
    • 高可用安装(有难度)
      • Zookeeper
      • Hadoop-Namenode
      • Yarn-ResourceManager
      • Hive
      • Hbase
      • Kafka
      • DolphinScheduler
      • Redis
      • Doris
      • Celeborn
      • Ozone
      • Ranger
  • Kerberos 旧版专题

    • 实战 Kerberos
    • 自建 Kerberos
      • KDC服务初始化安装
        • KDC服务初始化安装(RHEL篇)
        • KDC服务初始化安装(Ubuntu篇)
      • 开启Kerberos认证
        • Ambari 中开启 Kerberos 认证流程详解
        • [不看会报错]-Atlas开启准备工作
        • [不看会报错]-Zeppelin开启准备工作
        • [不看会报错]-Impala开启准备工作
        • [不看会报错]-Trino开启准备工作
      • 关闭Kerberos认证
        • Ambari 中关闭 Kerberos 认证流程详解
    • FreeIPA 认证
      • FreeIPA服务端初始化
        • FreeIPA Server 安装指导
      • FreeIPA客户端初始化及Ambari开启IPA认证
        • [Step1]-FreeIPA Client 安装与入域实战
        • [Step2]-FreeIPA 初始化核心用户
        • [Step3]-Ambari 中开启 Kerberos 认证流程详解
        • [Step3-1]-krb5-conf template调整
      • 部分踩坑-问题发现
        • Ambari Server 启动失败:no valid keystore
        • FreeIPA Client 导致 Ambari 权限异常问题排查
      • 部分踩坑-完美解决
        • Ambari Server 启动失败:no valid keystore
      • 辅助测试
        • FreeIPA Client 调试安装速记
        • Ambari Server 证书调试安装速记
    • 其他优化技巧
      • Atlas-Ranger-StringUtils缺失
      • Atlas-Ranger-commons-compress缺失
    • 部分组件踩坑合集
      • Test Kerberos Client报错:Failed to kinit
      • KERBEROS SERVICE CHECK 报错
      • Ambari开启Kerberos认证加密类型错误
      • [开启Kerberos]-Solr启动失败处理
      • [开启Kerberos]-Kafka启动失败处理
      • [开启Kerberos]-Atlas启动-Hbase权限异常
      • [开启Kerberos]-Atlas启动-Solr权限异常
      • [开启Kerberos]-Atlas启动-Kafka权限异常
      • [开启Kerberos]-Hive服务检查异常处理
      • [开启Kerberos]-Trino启动-配置文件处理
      • [开启Kerberos]-Trino启动-缺失PEM证书处理
      • [开启Kerberos]-Trino启动-连接Hive失败
      • [关闭 Kerberos]-Kafka 注销异常
      • [关闭 Kerberos]-Hive 注销异常
      • Kerberos 客户端模板渲染异常处理(临时处理)
      • Kafka 启动兼容 Kerberos 源码级修改
      • Kerberos 客户端模板渲染异常处理(源码修改)
    • 实战技巧
      • Knox 接入 Trino web-ui 解决方案
      • [开启Kerberos]-Trino启动-配置模板
      • [Knox适配]-Trino-474-转发规则魔改
    • 其他技巧
      • Ambari Security 开启步骤
  • Ranger 旧版专题

    • 实战 Ranger
    • Ranger HA 旧发行版
      • 环境准备
        • [Step1] Haproxy 规划与环境安装
      • Kerberos准备
        • [Step2] 统一访问域名的 Kerberos 票据生成
        • [Step3] 调整 Kerberos Client 配置
      • 安装指导
        • [Step4] Ambari页面开启 Ranger Admin 高可用
        • [Step5] 对齐 Ranger HA 的凭证处理
    • Ranger HA ttr-release
      • [Step2] Ranger Admin HA 自动化安装
    • FreeIPA 与 LDAP
      • [Step1] Ambari 安装 Ranger 并配置 FreeIPA + LDAP
      • [Step2] 制作 Ranger Usersync 证书并应用组件
      • [Step3] 制作 Ranger Admin 证书并应用组件
      • [Step4]Ranger HDFS Repository 创建失败修复
      • [Step5]Ranger HBase Repository 创建失败修复
    • 踩坑汇总
      • 调用 Ranger API 返回 403 问题
      • Ranger Admin LDAP 认证报 Bad credentials 分析
    • 解决方案
      • Ranger Admin LDAP 认证报 Bad credentials 处理
      • Ranger HA 虚拟域名 Principal 缺失修复
      • Ranger Usersync 证书快速导入脚本(LDAPS)
      • Ranger Admin 证书快速导入脚本
      • Ranger HDFS Repository 快速处理
      • Ranger HBase / Yarn Repository 快速处理
  • 开发环境

    • Ambari-Env
      • 环境准备
      • 开始使用
    • 工具与镜像
      • Maven镜像加速
      • Gradle镜像加速
      • Node.js 多版本共存方案
      • Npm镜像加速
      • Bower镜像加速
      • R环境安装+一键安装脚本
      • PostgreSQL 快速安装
  • Ambari 编译

    • Ambari 源码编译
    • 前端开发
    • 后端开发
    • Ambari Web本地启动
  • Bigtop 编译

    • 官方组件编译
    • 扩展组件编译
    • 工具与镜像
      • Ivy配置私有镜像仓库
      • APT仓库增量更新
      • Temurin JDK 23快速安装
  • Ambari 深度专题

    • Ambari Server 原理
    • Ambari Metrics 解读
  • Bigtop 方法论

    • Bigtop 深度专题
  • 自定义集成

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 各组件代码
    • 通用代码模板
  • 报错解决

    • Ambari 报错
      • Ambari Views
        • MDEP-187 从根因到修复
        • Loading node labels问题解决
      • Ambari
        • phantomjs下载失败问题
        • 编译问题:GCC 安装与配置
        • bower CERT_HAS_EXPIRED 错误问题
        • Ambari-admin包出现bower install错误
        • Cannot run program "rpmbuild"
        • Python: No such file or directory
        • Yarn解压报错EOFException排查与解决
        • Rpm-maven-plugin与shebang兼容性报错
        • Rpm-maven-plugin 最佳实践
        • Bower install拉取失败解决
        • 缺少 python3 报错解决
        • Python(>=2.6) but is not installed
        • SSL_ERROR_SYSCALL 的修复方法
      • Ambari-infra
        • org.apache.commons.io does not exist
        • maven-compiler-plugin:3.3:compile
        • java.security.InvalidAlgorithmParameterException
        • ambari-infra-solr-plugin依赖报错解决方案
      • Ambari-metrics
        • psutil 缺失与 archive_util 导入错误
        • Ambari-Metrics Monitor 启动失败
        • Ambari-Metrics Monitor 启动失败
        • Ambari-Metrics Monitor 启动失败
        • Ambari-Metrics Monitor 启动失败
    • Bigtop 报错
      • Hadoop
        • /usr/bin/env: python3: No such file or directory 问题
        • error [email protected]: The engine "node" is incompatible with this module 错误
        • CMake 3.1 or higher is required. You are running version 2.8.12.2 错误
        • fuse is needed by hadoop_3_2_0-3.3.4-1.el7.x86_64 错误
        • Cyrus SASL/GSASL 缺失解决
        • Protobuf PROTOC LIBRARY NOTFOUND
        • EVP CIPHER CTX block size 报错
        • TIRPC_INCLUDE_DIRS NOTFOUND解决
        • 缺失 redhat-rpm-config 报错
      • Spark
        • evaluate,httr2,knitr 包不存在解决办法
        • Pandoc 缺失导致 SparkR 构建失败
      • Trino
        • Trino requires Temurin or Oracle JDK for development
        • GLIBC 与 GLIBCXX 版本过低
      • Hudi
        • javax.annotation.Nullable 缺失
        • 缺失 everit-json-schema 依赖
      • Paimon
        • 缺失 Jindo 依赖
      • Livy
        • apache-incubator-disclaimer-resource-bundle 缺失
      • Flink
        • .git can't be found during `prepare`
        • Angular CLI requires Node >=14.15
        • npm run ci-check 报错退出码 3
        • TypeScript 类型声明错误
      • Atlas
        • Atlas 集成 JanusGraph 启动时报 Solr6Index 实例化失败解决
      • Superset
        • urllib3 v2 only supports OpenSSL 1.1.1+
      • Jsvc
        • jsvc 依赖缺失导致 rpm 构建失败
      • Zookeeper
        • ZooKeeper 构建(缺少 hostname 命令)
        • cppunit-devel 依赖缺失解决方案
      • Hive
        • org.apache.logging.slf4j.Log4j.Marker is not public 解决方案
      • Sqoop
        • xmlto is needed by 解决方法
        • lsb_release、rsync 缺失导致构建中断
        • asciidoc 警告与 relnotes.py 语法不兼容分析
      • Cloudbeaver
        • SelectExpressionItem cannot be resolved 报错分析
      • Bigtop-select
        • bigtop-select 打包缺 compat 报错修复
        • bigtop-select 打包缺 control 文件报错修复
      • Knox
        • xmlsectool 依赖缺失问题解析
        • webhdfs-test 依赖收敛冲突问题处理
        • Invalid keystore format 问题处理
        • Knox is not allowed to impersonate admin
        • X-Forwarded-For 406 错误的原因与处理
      • Hue
        • Hue 访问 Hadoop 权限问题
        • Hue 访问 Yarn 权限问题
        • Hue 访问 Impala 时间格式问题
        • requests-kerberos 兼容性问题
        • libmariadb.so.3 缺失导致 syncdb 失败
        • 生产环境下解决方案——Hue/query_api.py
  • 系统适配

    • Kylin V10系列
      • 通用部分
        • not set for current OS
          • 解读-不支持操作系统解读
          • 解决-增加系统支持范围(一)
          • 解决-增加系统支持范围(二)
          • 解决-增加系统支持范围(三)
          • 解决-增加系统支持范围(四)
        • 解决-TLS1.3导致依赖下载失败终极办法
    • Rocky系列
      • 案例-Ambari重启失败
        • 解读-Ambari3.0.0重启失败问题
        • 解决-追加日志锚点
        • 解决-进一步分析与改造[一]
        • 解决-进一步分析与改造[二]
      • 案例-数据库连接问题
        • 解读-安装完毕后出现Unable to load version data from server
      • 案例-日志级别控制问题
        • 解读-Ambari3.0.0无法调整日志输出级别
        • 解决-临时处理日志级别不生效
        • 解决-源码级处理日志不生效
      • 案例-找不到snappy-devel
        • 解决-HDFS报snappy-devel包缺失现象
      • 案例-编译高级功能
        • 解读-开启Hadoop下ISAL-L和PMDK功能
        • 解决-ISAL-L和PMDK功能完整环境包
    • Ubuntu系列
      • 案例-首次编译环境处理
        • 解决-dpkg-buildpackage依赖缺失
        • 解决-devscripts依赖缺失
        • 首次编译-环境初始化
      • 案例-Bigtop适配Debian
        • 解读-bigtop-select支持deb
        • 解决-Step1-解除限制拥抱deb
        • 解决-Step2-补全代码结构
      • 案例-安装中遇到的问题
        • 解读-APT私有镜像验证失败剖析
        • 解决-快速处理APT私有镜像验证失败问题
      • 案例-编译高级功能
        • 解读-开启Hadoop下ISAL-L和PMDK功能
        • 解决-ISAL-L和PMDK功能完整环境包
    • Centos系列
    • OpenEuler系列
  • 监控与调优

    • Ambari-Metrics插件
    • Infinity插件
      • 准备工作
        • Ambari-Metrics插件失效原因
        • Infinity 插件选择与安装小技巧
        • Grafana9.3.2+Infinity2.3.1
          • Grafana快速安装Infinity插件
        • Grafana11.5.2+Infinity3.4.1
          • Grafana快速安装Infinity插件
      • 创建最简DEMO
        • Grafana9.3.2+Infinity2.3.1
          • 快速创建一个简单demo
          • Panel JSON 配置示例
        • Grafana11.5.2+Infinity3.4.1
          • 快速创建一个简单demo
          • Panel JSON 配置示例
    • 组件配置调优
      • HDFS
        • [0001]访问 HDFS Web UI Logs Unauthorized 失败
        • [0001]>>>>>>Hadoop管理员配置优化
      • RANGER
        • [0002]Ranger 审计日志时间与系统时间不一致调整
        • [0002]>>>>>日期统一规则调优
        • [0001]Resource lookup fail 线程池超时优化
        • [0001]>>>>>>线程池与超时参数调优
    • 组件调优指南
    • 1v1指导调优
  • BUG临时处理

    • 版本-v2.2.2-以前
      • [22213]Ambari 3.0.0 滚动重启只执行一台主机修复
      • [22213]解决办法
      • [22212]Ambari 3.0.0 左侧服务菜单滚动条缺失修复
      • [22212]解决办法
      • [22211]Atlas 缺失 __AtlasUserProfile
      • [22211]解决办法
      • [22210]Atlas Hook 无权限访问 Kafka Topic
      • [22210]解决办法
      • [22209]Ranger Kafka Lookup 缺少 JAAS 配置
      • [22209]解决办法
      • [22208]Atlas Hook 消费 Kafka 报错
      • [22208]解决办法
      • [22207]Hue 内访问 SparkSql 失败
      • [22207]解决办法
      • [22206]Ranger 调用 Knox Topologies 失败
      • [22206]解决办法
      • [22205]Ranger Admin 轮刷ZK 缺失 JAAS
      • [22205]解决办法
      • [22204]KNOX policymgr-ssl 启动告警
      • [22204]解决办法
      • [22203]Hue 服务启动后秒退
      • [22203]解决办法
      • [22202]Hue 启动失败: hadoop 用户不存在
      • [22202]解决办法
      • [22201]Hive 使用 Tez 引擎插入数据失败
      • [22201]解决办法
    • 版本-v2.1.0-以前
      • Sqlline 启动卡死问题处理
  • 实验室

    • VIEW插件
      • CAPACITY-SCHEDULER-VIEW
        • Ambari CAPACITY-SCHEDULER 插件安装详解
      • FILE-VIEW
        • Ambari FILE-VIEW 插件安装详解
    • JIRA速查
    • 虚拟环境思路
GitHub (opens new window)
  • Ambari 深度专题

  • Bigtop 方法论

  • 自定义集成

  • Ambari Server 与 Web

    • 方法论

    • 代码生命周期-metainfo

    • 架构剖析

      • server与agent协作详解[一]
      • server与agent协作详解[二]
      • ambari install逻辑详解[一]
      • ambari install逻辑详解[二]
      • ambari install逻辑详解[三]
      • stack-hooks逻辑详解[一]
      • stack-hooks逻辑详解[二]
      • distro-select逻辑详解
        • 1. 引言与问题概述 🎯
          • 1.1 背景介绍
          • 1.2 本节目标
        • 2. 核心概念解析 🧠
          • 2.1 distro-select 的定义与功能
          • 2.2 setup_stack_symlinks 方法的作用
          • 2.3 符号链接管理逻辑
        • 3. 实操与代码解析 🔧
          • 3.1 stack-hooks(after-INSTALL)通用方法
          • 3.2 setup_stack_symlinks 核心逻辑
          • 3.2.1 shared_initialization.py 中的 setup_stack_symlinks 方法
          • 3.2.2 stack_select.py 中的版本选择逻辑
          • 3.2.3 stack_tools.py 中的路径获取逻辑
          • 3.2.4 get_packages 方法解析
          • 3.3 组件版本管理文件的目录结构
        • 4. 最佳实践与技巧 💡
        • 5. 总结与延伸学习 🚀
          • 5.1 内容回顾
      • java 请求过程解读[一]
      • java 请求过程解读[二]
      • java 请求过程解读[三]
      • java 请求过程泛化及补充[一]
      • java 请求过程泛化及补充[二]
    • UI样式

  • Ambari Metrics

  • Redis集成实战

  • 通用代码模板

  • 各组件代码

  • 技术专题
  • Ambari Server 与 Web
  • 架构剖析
JaneTTR
2025-06-03
目录

distro-select逻辑详解

# 1. 引言与问题概述 🎯

# 1.1 背景介绍

在分布式集群的管理中,版本控制是一个不可或缺的核心环节。集群内部可能需要支持多个组件版本,以适应不同业务需求、快速迭代的技术环境和动态变化的依赖关系。为此,Ambari 通过 distro-select 模块来实现多版本管理,它在组件安装和更新过程中发挥着关键作用,确保各版本间的兼容性和一致性。

distro-select 作为 Ambari 中重要的版本控制机制,通过符号链接(symlinks)管理来提供一个标准化的指针,以便在各个版本的组件之间实现无缝切换。该模块通过自动更新版本链接,确保集群在不同版本共存时依旧能够保持稳定的运行环境,从而减少手动管理的复杂度,提高系统的可维护性和灵活性。实现逻辑中,setup_stack_symlinks(struct_out_file) 是其核心方法之一。该方法负责在组件安装后调用 <stack-selector-tool> ,并设置指向所需组件版本的符号链接,确保系统在多版本环境中的一致性。通过 setup_stack_symlinks 方法,distro-select 模块能够有效地自动化指针调整和版本控制,避免了人工干预的风险。

# 1.2 本节目标

本节的目标是系统性地解析 distro-select 的设计逻辑与具体应用,帮助读者深入理解其在多版本管理中的具体实现方式。我们将从以下几个方面展开:

  1. distro-select 的工作原理

    • 解析 distro-select 的核心原理,包括其如何实现版本选择、符号链接的更新逻辑等。
  2. setup_stack_symlinks 方法的作用与实现

    • 深入探讨 setup_stack_symlinks(struct_out_file) 方法的功能,分析其在版本指针调整中的关键作用。
  3. distro-select 的实际应用场景

    • 展示多版本管理的典型应用场景,例如在升级、回滚和版本切换时的流程,以帮助用户理解如何在集群管理中高效运用 distro-select。

# 2. 核心概念解析 🧠

# 2.1 distro-select 的定义与功能

distro-select 是 Ambari 中为管理多版本组件而设计的关键模块,主要用于在集群内自动切换和选择不同版本的组件。其核心作用是通过符号链接(symlink)机制,确保集群各节点在多版本环境下能够一致地引用所需组件,从而降低版本冲突的风险。

该模块通过创建和更新符号链接的方式,使得不同组件在不同版本之间可以动态切换。这种链接更新机制让运维人员无需手动更改路径或重新配置环境变量即可实现版本切换,从而大大提升了多版本共存时的灵活性与兼容性。

# 2.2 setup_stack_symlinks 方法的作用

在 distro-select 的实现中,setup_stack_symlinks 是实现自动版本切换的核心方法之一。其具体作用和实现逻辑如下:

  • 方法功能 setup_stack_symlinks(struct_out_file) 方法用于调用 <stack-selector-tool> 工具,将集群内的符号链接设置为指定的版本。其主要功能是确保组件的版本指针指向系统要求的标准化版本路径,从而避免因版本不匹配而引发的兼容性问题。

  • 运行流程 方法运行时,会从系统配置中获取目标版本信息,并通过 <stack-selector-tool> 将该信息写入符号链接。最终,集群内的相关指针(如 HDP、HDFS 等路径)都会自动更新为指向目标版本的路径,完成版本的切换。

  • 自动化版本控制的优势 setup_stack_symlinks 提供了一个可靠的自动化版本控制方法,无需人为干预便可完成指针调整。这种方式不仅减少了手动操作的失误风险,也加快了版本切换速度,使得系统可以在版本更新、回滚等场景中快速响应。

# 2.3 符号链接管理逻辑

distro-select 通过符号链接管理来实现组件版本的切换与管理。具体的管理逻辑如下:

  1. 指针初始化

    • 在组件的初始安装过程中,setup_stack_symlinks 会生成一系列符号链接,这些链接指向组件的默认版本,以便后续操作和维护。
  2. 版本切换

    • 当系统需要切换至不同的组件版本时,setup_stack_symlinks 会重新调用 <stack-selector-tool> ,并更新所有相关指针的符号链接。通过这种方式,各个组件可以在多版本共存的环境中无缝切换。
  3. 一致性检查

    • 为确保所有节点的符号链接指向相同的目标版本,distro-select 还包含一致性检查机制,能够在每次指针更新后自动验证链接路径的准确性,避免多节点环境中产生版本不一致的问题。

# 3. 实操与代码解析 🔧

# 3.1 stack-hooks(after-INSTALL)通用方法

接续上次的内容,setup_stack_symlinks 方法是所有组件安装完后必须执行的代码。它可以视为 Ambari 与各组件之间的桥梁和纽带,通过符号链接管理实现组件的动态指向更新。在 HDP 和 Bigtop 两大分发版本中,都使用了 distro-select 进行组件版本管理,这为系统在多版本共存时提供了强有力的支持。

例如,以下 AfterInstallHook 类中的 hook 方法展示了 setup_stack_symlinks 的调用逻辑:

image-20241027174432343

在具体应用中,setup_stack_symlinks 可以确保各组件指向目标版本,进一步提高多版本环境中的一致性和系统稳定性。

# 3.2 setup_stack_symlinks 核心逻辑

在 setup_stack_symlinks 方法中,其主要功能是调用 <stack-selector-tool> 设置符号链接。下面的内容对其具体实现和流程进行了深入解析。

# 3.2.1 shared_initialization.py 中的 setup_stack_symlinks 方法

shared_initialization.py 中的 setup_stack_symlinks 代码片段展示了版本指向的更新逻辑:

image-20241027174520548

  • 版本检查:在安装组件后,通过 setup_stack_symlinks 调用 <stack-selector-tool>,确保指针指向正确的版本路径。
  • 同步执行锁:使用锁机制确保在高并发环境下的版本路径一致性,避免出现路径错误的情况。

# 3.2.2 stack_select.py 中的版本选择逻辑

stack_select.select(component, version) 函数的主要作用是使用 <stack-selector-tool> 为特定组件设定版本。示例如下:

image-20241027174618457

# 具体的执行代码为:
ambari-python-wrap \
/usr/lib/bigtop-select/distro-select \
set \
kafka-broker \
3.2.0

# 对于命令执行的含义 我们在 做过精讲。这里不在赘述
# Ambari集成Dolphin实战-009-实战bigtop-select修改
1
2
3
4
5
6
7
8
9

image-20241027175213150

执行完以后的效果,在 /usr/bigtop/current 下的所有组件通过软连接形式去关联版本组件

image-20241027175005662

# 3.2.3 stack_tools.py 中的路径获取逻辑

stack_tools.py 文件提供了路径获取和管理功能,以下是主要方法的解析:

image-20241027175828215

  • 工具配置:get_stack_tool 根据分发版本的 stack_tools 配置获取各自版本管理工具的路径和名称。hdp-select、bigtop-select 等工具的路径在此被动态设定。
  • 路径解析:各组件的 stack_tool 配置被解析为路径和文件名,以便 Ambari 在运行时调用。

路径逻辑如下图:

image-20241027180244767

# 3.2.4 get_packages 方法解析

get_packages 方法用于在 Ambari 的 stack-select 工具中获取与特定服务和组件关联的包信息,以实现对多版本环境的管理和控制。该方法接收 scope、service_name 和 component_name 作为参数,通过验证和配置解析,定位到特定服务和组件的包名称列表。以下是方法的详细逻辑解析:

def get_packages(scope, service_name=None, component_name=None):
    # 1. 检查 scope 的有效性
    if scope not in _PACKAGE_SCOPES:
        raise Fail("The specified scope of {0} is not valid".format(scope))

    # 2. 加载配置,获取 service_name 和 component_name
    config = Script.get_config()
    if service_name is None or component_name is None:
        if 'role' not in config or 'serviceName' not in config:
            raise Fail("Both the role and the service name must be included in the command.")
        service_name = config['serviceName']  # 例如 "KAFKA"
        component_name = config['role']  # 例如 "KAFKA_BROKER"

    # 3. 获取 stack_name,例如 "HDP" 或 "Bigtop"
    stack_name = default("/clusterLevelParams/stack_name", None)
    if stack_name is None:
        raise Fail("The stack name is not present in the command. Packages for stack-select tool cannot be loaded.")

    # 4. 加载 stack_packages 配置,包含所有服务和组件的包映射
    stack_packages_config = default("/configurations/cluster-env/stack_packages", None)
    if stack_packages_config is None:
        # 此处的日志仅用于临时调试,未找到 stack_packages 时将返回 None
        Logger.error("Temporary disable: The stack packages are not defined on the command.")
        return None

    # 解析 stack_packages_config JSON 数据
    data = json.loads(stack_packages_config)
    if stack_name not in data:
        raise Fail("Cannot find stack-select packages for the {0} stack".format(stack_name))

    # 5. 读取 stack-select 配置内容
    # stack_select_key 是 "stack-select",表示 stack-select 工具的包配置
    stack_select_key = "stack-select"
    data = data[stack_name]
    if stack_select_key not in data:
        raise Fail("There are no stack-select packages defined for this command for the {0} stack".format(stack_name))

    # 此处省略

    # 6. 获取特定服务(如 "KAFKA")和组件(如 "KAFKA_BROKER")的包信息
    # service_name 和 component_name 转为大写,以确保配置一致
    data = data[service_name.upper()]
    if component_name.upper() not in data:
        Logger.info("Skipping stack-select on {0} because it does not exist in the stack-select package structure.".format(component_name))
        return None
    packages = data[component_name.upper()][scope]

    # 此处省略
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

核心逻辑与变量值说明

  1. Scope 验证:

    image-20241027184506222

    • _PACKAGE_SCOPES 是预定义的支持范围列表。这也是我们stack_tools.json 中的内容参数
  2. Service 和 Component 的加载:

image-20241027184100483

  • serviceName 为 "KAFKA",role 为 "KAFKA_BROKER"。
  1. Stack Name 获取:

    image-20241027184806677

    • stack_name 从 clusterLevelParams 中加载,例如 "HDP" 或 "Bigtop"。
    • 如果 stack_name 未定义,方法将报错并停止执行。
  2. Stack Packages 配置解析:

    • stack_packages_config 通过 cluster-env 配置加载,包含所有服务和组件的包信息。
    • 此配置以 JSON 格式存储,以便根据 stack_name、service_name 和 component_name 查找匹配的包。
  3. Service 和 Component 的包选择:

    • 将 service_name 和 component_name 转换为大写后,查找特定的服务和组件包配置。
    • 若找不到特定组件,会记录日志并返回 None,表明此组件无需执行 stack-select 操作。
  4. 返回结果:

    • 返回符合 scope 要求的单个包或包列表,确保返回的包适用于当前的多版本管理环境。

image-20241027185102986

我们在ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/properties/stack_packages.json 中定义 service 和 role ,其实就

能知道,install 阶段,我们需要对哪些组件进行软连接。

# 3.3 组件版本管理文件的目录结构

在 bigtop 和 hdp 的配置文件中可以看到两者的版本管理工具和路径。例如:

  • Bigtop 配置:

    {
      "BIGTOP": {
        "stack_selector": [
          "distro-select",
          "/usr/lib/bigtop-select/distro-select",
          "bigtop-select"
        ]
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • HDP 配置:

    {
      "HDP": {
        "stack_selector": [
          "hdp-select",
          "/usr/bin/hdp-select",
          "hdp-select"
        ]
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

两者分别在不同的目录下设置了 stack_selector,这确保了各自环境的版本管理独立性。通过 stack-select 工具,Ambari 可以轻松地管理和切换组件的不同版本,有效支持多版本共存和灵活的升级回滚操作。

# 4. 最佳实践与技巧 💡

在 Ambari 中,distro-select 主要用于管理多版本组件,通过符号链接的方式确保集群中各节点的组件版本一致,使得在版本切换时可以平滑过渡而不影响运行环境。distro-select 通过读取 stack_packages.json 的配置来决定各组件版本的位置和规则。

在自定义组件的开发中,合理配置 stack_packages.json 是实现多版本管理的关键。以下是一些配置规则和技巧:

  1. 定义组件的包信息:stack_packages.json 文件中,每个服务和组件都需要定义其版本包,以便 distro-select 能够正确管理。

    • 例如,对于服务 KAFKA 的组件 KAFKA_BROKER,可以配置如下:

      image-20241027185736271

    • 上述配置指定了安装和启动时需要的包名称,distro-select 会根据这些信息设置符号链接,确保组件指向正确的版本包。

  2. 明确作用范围 (scope):在 stack_packages.json 中,scope 是包的使用范围,如 "INSTALL" 表示安装时需要的包,为每个操作指定合适的包,有助于 distro-select 在各个阶段自动切换版本。

  3. 自定义组件配置:在自定义组件时,可以参照已有的服务配置。例如,如果您要新增 MY_SERVICE,可按照以下结构添加:

    {
      "BIGTOP": {
        "stack-select": {
          "MY_SERVICE": {
            "MY_COMPONENT": {
              "STACK-SELECT-PACKAGE": "填写 role name",
              "INSTALL": [
                "填写 role name 至少"
              ]
            }
          }
        }
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    这样配置后,distro-select 能够识别并管理自定义组件的安装。

# 5. 总结与延伸学习 🚀

# 5.1 内容回顾

在本节中,我们深入解析了 distro-select 在 Ambari 中的作用,了解了它如何通过符号链接实现多版本环境下的组件管理。我们还探讨了如何在 stack_packages.json 文件中正确配置自定义组件,以便我们在自定义组件中环节中知道该怎么去填写。以及知道软连接设置的语法及触发的逻辑。

#Ambari#源码解析#Bigtop
stack-hooks逻辑详解[二]
java 请求过程解读[一]

← stack-hooks逻辑详解[二] java 请求过程解读[一]→

最近更新
01
当前版本 2026/06
06-05
02
Step7—Mariadb初始化
03-23
03
【Kylin V10 aarch64】强力卸载脚本 aarch64
03-22
更多文章>
Theme by Vdoing | Copyright © 2017-2026 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式