CDH6.3.2版本安装-适配centos8或alinux3或其他国产套皮centos系统

62 阅读5分钟

CDH6.3.2版本安装-适配centos8或alinux3或其他国产套皮centos系统

甚至连centos8目前也不支持,cdh更早的版本支持的更少


一、背景说明

  • 软件版本
    • • Cloudera Manager:6.3.x
    • • CDH:6.3.2(最后一个开源版本)
  • 操作系统
    • • 国产化 Linux(例如 Alibaba Cloud Linux 3 / alinux3 等),非官方支持列表中的 RHEL/CentOS 7
  • 主要问题
    1. 1. 安装 CM Server / Agent 时,依赖的 OpenSSL 版本与系统不匹配
    2. 2. CM Web 界面中 Parcel 分发失败,提示主机 OS 未分配(unknown),导致 CDH Parcel 无法分发/安装。

二、问题一:CM Server/Agent 安装依赖 OpenSSL 失败

1. 典型报错

安装 cloudera-manager-agent-6.3.1 / cloudera-manager-server-6.3.1 时:

openssl-devel is needed by cloudera-manager-agent-6.3.1-1466458.el7.x86_64

或间接导致 libssl.so.10 / libcrypto.so.10 找不到。

本质原因
Cloudera 的 rpm 是按 CentOS 7 / RHEL7 打出来的,要求的是 1.0.x 系列的 OpenSSL 和对应的 so;
国产 OS 自带的是 OpenSSL 1.1.x(甚至更高),ABI 不兼容。

2. 解决思路

核心策略:引入 CentOS 7 的 OpenSSL 1.0.2 库作为兼容层,同时保留系统自带的 1.1 版本,避免破坏 ssh 等基础功能。

3. 操作步骤

步骤 A:备份系统原有 1.1 库

通常路径类似:

cp /usr/lib64/libssl.so.1.1   /root/backup-libssl.so.1.1
cp /usr/lib64/libcrypto.so.1.1 /root/backup-libcrypto.so.1.1

具体路径按实际系统为准,原则是:先把 1.1 那一套完整备份出来。


步骤 B:强制安装 CentOS 7 的 openssl-libs

将下列 rpm 拷到服务器(示例):

openssl-libs-1.0.2k-19.el7.x86_64.rpm

然后执行:

rpm -Uvh openssl-libs-1.0.2k-19.el7.x86_64.rpm --nodeps --force

这会在系统中提供:

  • /usr/lib64/libssl.so.10
  • /usr/lib64/libcrypto.so.10

满足 CM/Agent 以及 Python M2Crypto 等旧组件的运行需求。

注意:这一步可能会卸载/覆盖系统自带的 OpenSSL 包,所以 必须先做步骤 A 的备份


步骤 C:恢复系统原有 1.1 库(保护 ssh 等)

将之前备份的 1.1 版本库放回原位:

cp /root/backup-libssl.so.1.1    /usr/lib64/libssl.so.1.1
cp /root/backup-libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ldconfig

这样系统上同时存在:

  • libssl.so.10 / libcrypto.so.10(给 Cloudera / M2Crypto 用)
  • libssl.so.1.1 / libcrypto.so.1.1(给系统服务 / ssh 用)

结果:

  • cloudera-scm-servercloudera-scm-agentsupervisord 不再报 libssl.so.10 找不到;
  • • CM Server、Agent 能正常启动,日志不再有 ImportError: libssl.so.10 类错误。

三、问题二:CM Web 中 Parcel 分发失败(unknown OS)

1. 现象

在 CM Web 向导中:

  • • “Install Parcels” 页面显示:``` CDH 6.3.2-1.cdh6.3.2.p0.1605554 已激活: 0/0 已解压: 0/0 已分配: 0/0 已下载: 0%

  • • 并提示:

    一個或多個主機沒有報告其操作系統分配。這可能是由於運行已過期的 Cloudera Manager Agent 版本造成的。

而 Agent 日志和心跳其实都是正常的。

2. 原因分析

CM 的工作机制:

  1. 1. Agent 上报主机的 OS 信息(来自 /etc/os-release 等);
  2. 2. CM 根据规则将其映射为内部支持的 OS 类型,如:
    • redhat7 → 对应 *-el7.parcel
    • sles12 → 对应 *-sles12.parcel
    • ubuntu16→ 对应 *-ubuntu16.parcel
  3. 3. 对于 不在支持列表里的国产系统,CM 无法识别,会直接归类为 unknown
  4. 4. 默认的 manifest.json没有为 unknown 提供 parcel 配置,因此:
    • • CM 认为“没有 OS 被分配”;
    • • UI 上就是 0/0,parcel 无法下载/分发。

3. 解决思路

核心策略:
让 CM 认为 “unknown” 这个 OS 也有对应的 CDH parcel
通过修改 manifest.json + 重命名 parcel 文件,硬适配国产 OS。

4. 操作步骤(以 CDH 6.3.2 为例)

假设你本地离线仓库结构类似:

cd /path/to/cdh6/
ls
# allkeys.asc
# CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
# CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1
# CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha256
# manifest.json
步骤 A:重命名 parcel 文件为 unknown
mv CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel \
   CDH-6.3.2-1.cdh6.3.2.p0.1605554-unknown.parcel

sha1/sha256 文件可以保留 el7 命名,也可以一并复制/改名,视 manifest 配置而定。


步骤 B:修改 manifest.json 增加 unknown OS 配置

打开 manifest.json,在 parcels 段中复制一份 el7 的配置,修改为 unknown,类似:

{
  "parcels": [
    {
      "components": [
        {
          "name": "kafka",
          "pkg_release": "1605554",
          "pkg_version": "2.2.1+cdh6.3.2",
          "version": "2.2.1-cdh6.3.2"
        },
        {
          "name": "hadoop",
          "pkg_release": "1605554",
          "pkg_version": "3.0.0+cdh6.3.2",
          "version": "3.0.0-cdh6.3.2"
        }
        // ... 省略其它组件 ...
      ],
      "hash": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
      "parcelName": "CDH-6.3.2-1.cdh6.3.2.p0.1605554-unknown.parcel",
      "replaces": "IMPALA,SOLR,SPARK,KAFKA,IMPALA_KUDU,KUDU,SPARK2"
    }
  ]
}

关键点:

  • parcelName 必须和你刚刚重命名后的文件 一模一样
  • hash 一般保持和原 el7 版本一致(也可以重算,对应 sha1/sha256)。

核心目的:让 CM 在识别 OS 为 unknown 时,也能从 manifest 中找到一条匹配的 parcel 记录。


步骤 C:确保 CM 使用你改过的 manifest
  • • 本地 HTTP 仓库(例如 http://<server>/cdh6/)指向的就是你刚刚修改的目录;
  • • 确保 manifest.json*.parcel*.sha1/*.sha256 都已经对外可访问。

步骤 D:在 登录 CM 界面之前 完成上述操作

非常重要:

  • • 如果你在 第一次登录 CM Web 之前 就把 manifest & parcel 文件改好:
    • • CM 初始化 cmf 数据库时,会直接用正确的 unknown 配置;
    • • 后续就不会出现「不支持的 OS / 未分配 OS」这种 parcel 问题。
  • • 如果你已经登录过,且 CM 已经初始化完毕:
    • • 数据库 cmf.parcels 表中已记录原始的 el7 parcel 信息;
    • • 再改 manifest/文件名,可能需要额外手动修改 cmf.parcels 表,风险略高。

四、总结成一条路径

对国产化操作系统(例如 alinux3)部署 CDH 6.3.2 + CM 6.3.x,大体流程可以总结为:

  1. 1. 处理 OpenSSL 兼容性
    • • 备份系统自带 libssl.so.1.1 / libcrypto.so.1.1
    • • 强制安装 CentOS7 的 openssl-libs-1.0.2k...
    • • 还原 1.1 的库文件,确保 ssh 和系统正常;
    • • 确认 libssl.so.10 / libcrypto.so.10 存在且被 ldd 找到。
  2. 2. 在 CM 初始化前准备好国产 OS 专用的 manifest + parcel
    • • 重命名 CDH-6.3.2-...-el7.parcel...-unknown.parcel
    • • 修改 manifest.json,增加 unknown 的 parcel 条目;
    • • 确保 HTTP 仓库能正确暴露这些文件。
  3. 3. 启动/安装
    • • 启动 cloudera-scm-server-db(嵌入式 PostgreSQL);
    • • 启动 cloudera-scm-server,等待初始化完成;
    • • 启动 supervisordcloudera-scm-agent,确保心跳正常;
    • • 登录 CM Web → 向导中 “Install Parcels”
      此时应该能看到:
      CDH 6.3.2-... 已激活: 0/1,已解压: 0/1,已分配: 0/1,下载/分发可以正常进行。