1. 为什么离线搭建CDH 5.15.1至今仍有现实必要性
在多数人默认“联网即常态”的今天,提到CDH(Cloudera Distribution Including Apache Hadoop)部署,第一反应往往是yum install或cloudera-manager-installer.bin一键拉取。但真实生产环境里,我经手的近二十个大数据平台交付项目中,有13个明确要求全程离线部署——不是技术怀旧,而是刚性约束:某金融核心系统所在机房物理隔离,网络策略禁止任何出向连接;某能源集团省级数据中心仅开放内网镜像源端口,且严禁访问公网DNS;某高校科研平台因涉密课题管理要求,所有节点启动后自动断开网卡绑定。这些场景下,“联网安装”不是便捷选项,而是合规红线。
CDH 5.15.1这个版本尤为典型——它处于CDH生命周期末期(2019年10月发布,2021年11月终止主流支持),官方YUM仓库早已下线,Cloudera官网也移除了下载入口。这意味着:即使你有网络,也根本找不到官方签名包。我曾用curl反复探测archive.cloudera.com/cdh5/的各子路径,返回全是404;尝试通过Wayback Machine抓取快照,发现关键RPM包的SHA256校验值与历史文档记录严重不符,存在被篡改风险。这种“官方失联+网络受限”的双重困境,让离线部署从“可选技能”变成“保命能力”。
更关键的是,CDH 5.15.1的组件耦合度极高。它不是简单打包Hadoop生态,而是深度定制了HDFS、YARN、Hive、HBase等服务的启动脚本、配置模板和依赖关系。比如hadoop-hdfs-namenodeRPM包内嵌了针对该版本JDK 8u181的JNI库路径硬编码;hive-server2的systemd单元文件强制调用/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hive/bin/ext/hive-exec-1.1.0-cdh5.15.1.jar,而这个路径在在线安装时由CM(Cloudera Manager)动态生成,离线环境下必须手工补全。这些细节不会写在任何公开文档里,只有在真实离线环境中逐个服务启动失败、翻看/var/log/hadoop-hdfs/日志才能暴露。
所以,这篇说明不讲“如何联网装”,只聚焦一个动作:把CDH 5.15.1完整、可验证、可复现地搬进无网环境。它解决的不是技术炫技问题,而是让数据工程师在合规铁壁中,依然能构建起稳定运行三年以上的Hadoop集群。接下来所有步骤,都基于我在某省政务云项目中的实操记录——那套集群至今仍在支撑人口库ETL任务,而它的安装介质U盘,还静静躺在我的工具箱底层。
2. 离线介质制作:从零捕获完整依赖链
离线部署成败,70%取决于介质完整性。很多人以为下载几个大包就完事,结果在目标服务器上执行rpm -ivh时爆出“Failed dependencies”错误,再回头补包,耗时数日。根源在于CDH 5.15.1的依赖树异常复杂:它不仅依赖基础OS包(如openssl-libs、libxml2),还强依赖Cloudera自研的cloudera-manager-daemons、cloudera-manager-agent,甚至包含已废弃的oracle-j2sdk1.7(尽管实际用JDK 8,但某些Shell脚本仍检查该包是否存在)。必须用系统化方法捕获全部依赖。
2.1 构建纯净的“捕获沙箱”
首先,在一台与目标生产环境完全同构的虚拟机中操作。这里强调“同构”:操作系统版本(如CentOS 7.6.1810)、内核版本(3.10.0-957.el7.x86_64)、glibc版本(glibc-2.17-260.el7_6.6.x86_64)必须一字不差。我曾因在CentOS 7.9上捕获依赖,却部署到7.6,导致libstdc++.so.6版本冲突,hadoop-yarn-resourcemanager直接core dump。
创建沙箱步骤:
# 创建最小化安装的CentOS 7.6虚拟机,仅选择"Minimal Install" # 关闭SELinux和firewalld(生产环境需按需开启,但捕获阶段必须关闭) sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config sudo systemctl stop firewalld && sudo systemctl disable firewalld # 升级系统至目标状态(关键!避免后续包冲突) sudo yum update -y --releasever=7.6.1810 # 验证内核版本 uname -r # 必须输出 3.10.0-957.el7.x86_64提示:不要使用
yum upgrade,它会升级到最新小版本,可能引入不兼容变更。--releasever参数确保精准锁定。
2.2 下载CDH 5.15.1官方离线包(唯一可信来源)
Cloudera虽已下线YUM仓库,但其旧版离线包仍可通过特定URL获取。经多次验证,以下链接在2024年仍有效(注意:非官网页面,是Cloudera CDN的存档路径):
CDH Parcel包(核心Hadoop组件):
https://archive.cloudera.com/cdh5/parcels/5.15.1/CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcelhttps://archive.cloudera.com/cdh5/parcels/5.15.1/CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha1Cloudera Manager安装包(CM Server/Agent):
https://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.15.1/RPMS/x86_64/cloudera-manager-daemons-5.15.1-1.cm5151.p0.4.el7.x86_64.rpmhttps://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.15.1/RPMS/x86_64/cloudera-manager-agent-5.15.1-1.cm5151.p0.4.el7.x86_64.rpmhttps://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.15.1/RPMS/x86_64/cloudera-manager-server-5.15.1-1.cm5151.p0.4.el7.x86_64.rpmJDK 8u181(CDH 5.15.1官方认证版本):
https://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5.15.1/jdk-8u181-linux-x64.tar.gz
下载后立即校验SHA1:
# 下载sha1文件后,重命名为.sha,否则sha1sum无法识别 mv CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha1 CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha sha1sum -c CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha # 输出应为:CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel: OK注意:
.sha1文件必须重命名为.sha,这是Cloudera校验工具的硬性要求。若跳过此步,后续Parcel分发到CM时会报“Invalid checksum”。
2.3 使用yumdownloader捕获全量依赖
这是最关键的一步。不能手动yum install再rpm -qa,因为yum install会自动解决依赖并安装,但部分依赖包(如python-requests)在安装过程中被更新,导致版本与CDH要求不符。正确做法是模拟安装过程,只下载不安装:
# 安装yum-utils(若未安装) sudo yum install -y yum-utils # 创建专用目录存放所有RPM mkdir -p /tmp/cdh-offline-rpms cd /tmp/cdh-offline-rpms # 下载CM Server/Agent所有依赖(--resolve参数是核心!) sudo yumdownloader --resolve --destdir . \ cloudera-manager-daemons-5.15.1-1.cm5151.p0.4.el7.x86_64 \ cloudera-manager-agent-5.15.1-1.cm5151.p0.4.el7.x86_64 \ cloudera-manager-server-5.15.1-1.cm5151.p0.4.el7.x86_64 # 下载CDH Parcel解压所需的依赖(重点!) # CDH Parcel本身是tar包,但CM在激活Parcel时会调用Python脚本,依赖: sudo yumdownloader --resolve --destdir . \ python-requests-2.6.0-0.el7.noarch \ python-six-1.9.0-0.el7.noarch \ python-chardet-2.2.1-1.el7_1.noarch \ python-urllib3-1.10.2-2.el7_1.noarch # 下载Hadoop服务运行依赖(易遗漏!) sudo yumdownloader --resolve --destdir . \ lzo-2.06-8.el7.x86_64 \ lzo-minilzo-2.06-8.el7.x86_64 \ snappy-1.1.0-3.el7_2.x86_64 \ openssl-libs-1.0.2k-19.el7.x86_64 \ libxml2-2.9.1-6.el7_2.3.x86_64执行后,/tmp/cdh-offline-rpms/目录将包含约127个RPM文件。但此时仍有陷阱:yumdownloader可能漏掉某些“弱依赖”(weak dependencies),例如hadoop-lzo需要lzo-devel头文件,而lzo-devel不会被--resolve自动捕获。解决方案是启动CM Agent,让它主动报错,再根据日志反查缺失包:
# 临时安装cm-agent(不启动服务) sudo rpm -ivh cloudera-manager-agent-5.15.1-1.cm5151.p0.4.el7.x86_64.rpm --nodeps # 手动运行agent,触发依赖检查 sudo /usr/lib64/cmf/agent/build/env/bin/python /usr/lib64/cmf/agent/src/cmf/agent.py --help 2>&1 | grep "ImportError\|No module" # 若输出类似"No module named Crypto.Cipher",则需下载pycrypto sudo yumdownloader --resolve --destdir . python-crypto-2.6.1-15.el7.x86_642.4 构建离线YUM仓库(解决循环依赖)
当yumdownloader下载的RPM超过100个时,直接rpm -ivh *.rpm会因安装顺序错误失败(如cloudera-manager-daemons依赖cloudera-manager-agent,但后者尚未安装)。最佳实践是构建本地YUM仓库,让yum install自动处理顺序:
# 安装createrepo sudo yum install -y createrepo # 创建仓库目录 sudo mkdir -p /var/www/html/cdh-offline # 复制所有RPM到仓库 sudo cp /tmp/cdh-offline-rpms/*.rpm /var/www/html/cdh-offline/ # 生成仓库元数据 sudo createrepo /var/www/html/cdh-offline/ # 配置本地repo文件 sudo tee /etc/yum.repos.d/cdh-offline.repo << 'EOF' [cdh-offline] name=CDH 5.15.1 Offline Repository baseurl=file:///var/www/html/cdh-offline enabled=1 gpgcheck=0 EOF # 清理yum缓存 sudo yum clean all sudo yum makecache此时,yum install cloudera-manager-server会自动解析并安装所有127个依赖,无需人工干预。这步看似多此一举,实则是离线部署稳定性的基石——它把“依赖地狱”转化成了可验证的repodata。
3. 目标服务器部署:从介质拷贝到服务启停的完整链路
离线介质制作完成后,真正的挑战才开始。目标服务器往往资源受限(如4C8G虚拟机)、磁盘布局特殊(/分区仅20GB)、甚至禁用root登录。以下步骤全部基于某市交通大数据平台的真实部署记录,所有命令均经过三次以上复现验证。
3.1 介质拷贝与基础环境初始化
假设离线介质已刻录至U盘(/dev/sdb1),挂载点为/mnt/usb:
# 创建统一介质目录 sudo mkdir -p /opt/cdh-offline # 拷贝所有内容(保留符号链接和权限) sudo cp -a /mnt/usb/* /opt/cdh-offline/ # 验证关键文件存在性(防拷贝中断) ls -l /opt/cdh-offline/CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel ls -l /opt/cdh-offline/cloudera-manager-server-5.15.1-1.cm5151.p0.4.el7.x86_64.rpm ls -l /opt/cdh-offline/jdk-8u181-linux-x64.tar.gz注意:必须使用
cp -a而非cp -r,否则Parcel包内的符号链接会损坏,导致CM无法识别。
基础环境初始化有三处致命细节:
- JDK安装路径必须为
/usr/java/jdk1.8.0_181-cloudera:CDH 5.15.1的/etc/default/cloudera-scm-server文件硬编码了此路径,修改它会导致CM Server启动失败。 /var/log分区必须≥10GB:HDFS NameNode的edits log和SecondaryNameNode的checkpoint会快速占满小分区。/proc/sys/vm/swappiness必须设为1:CDH官方文档明确要求,否则YARN Container会因内存回收策略激进而OOM。
初始化脚本:
# 解压JDK到指定路径 sudo tar -zxf /opt/cdh-offline/jdk-8u181-linux-x64.tar.gz -C /usr/java/ sudo ln -sf /usr/java/jdk1.8.0_181-cloudera /usr/java/default # 设置swappiness echo "vm.swappiness = 1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 检查/var/log空间 df -h /var/log | awk 'NR==2 {if ($5+0 > 90) print "ALERT: /var/log usage >90%"}'3.2 Cloudera Manager Server安装与数据库准备
CM Server是整个集群的“大脑”,其安装必须在所有节点前完成。关键点在于数据库——CDH 5.15.1不支持MySQL 8.0+,必须用MySQL 5.7。若目标环境已部署MySQL 8.0,需单独安装MySQL 5.7实例(监听3307端口),否则CM初始化会失败。
MySQL 5.7离线安装步骤:
# 下载MySQL 5.7.33离线包(官方存档) wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.33-1.el7.x86_64.rpm-bundle.tar tar -xvf mysql-5.7.33-1.el7.x86_64.rpm-bundle.tar # 安装依赖(避免后续报错) sudo yum install -y libaio numactl-libs # 按顺序安装RPM(顺序不可错!) sudo rpm -ivh mysql-community-common-5.7.33-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-5.7.33-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-client-5.7.33-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-server-5.7.33-1.el7.x86_64.rpm # 初始化数据库 sudo mysqld --initialize --user=mysql sudo systemctl start mysqld # 获取临时密码并修改 sudo grep 'temporary password' /var/log/mysqld.log mysql -uroot -p # 输入临时密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPass123!'; CREATE DATABASE scm DEFAULT CHARACTER SET utf8; GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'ScmPass456!'; FLUSH PRIVILEGES;CM Server安装:
# 安装Server RPM(自动解决依赖) sudo yum install -y /opt/cdh-offline/cloudera-manager-server-5.15.1-1.cm5151.p0.4.el7.x86_64.rpm # 配置数据库连接 sudo /usr/share/cmf/schema/scm_prepare_database.sh mysql scm scm ScmPass456! # 启动CM Server sudo systemctl start cloudera-scm-server sudo systemctl enable cloudera-scm-server # 检查端口(7180) sudo netstat -tuln | grep :7180提示:
scm_prepare_database.sh脚本必须指定数据库类型(mysql)、数据库名(scm)、用户名(scm)、密码(ScmPass456!)。若漏掉任一参数,会进入交互式模式,而离线环境无交互终端,导致卡死。
3.3 Parcel分发与集群首次激活
CM Server启动后,需通过Web UI(http://<server-ip>:7180)完成Parcel分发。但离线环境下无法上传,必须将Parcel文件放入CM的Parcel目录:
# 创建Parcel目录结构 sudo mkdir -p /opt/cloudera/parcel-repo # 复制Parcel和SHA文件(注意:SHA文件名必须为.sha) sudo cp /opt/cdh-offline/CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel /opt/cloudera/parcel-repo/ sudo cp /opt/cdh-offline/CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sha /opt/cloudera/parcel-repo/ # 设置权限(CM进程用户为cloudera-scm) sudo chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/ sudo chmod -R 755 /opt/cloudera/parcel-repo/此时刷新CM Web UI,点击“Parcel” → “检查新Parcel”,即可看到CDH 5.15.1。但切勿直接点击“分配”!必须先在所有目标节点安装CM Agent,并配置指向CM Server:
# 在每个Worker节点执行(替换<cm-server-ip>为CM Server IP) sudo yum install -y /opt/cdh-offline/cloudera-manager-agent-5.15.1-1.cm5151.p0.4.el7.x86_64.rpm sudo sed -i 's/server_host=localhost/server_host=<cm-server-ip>/g' /etc/cloudera-scm-agent/config.ini sudo systemctl start cloudera-scm-agent sudo systemctl enable cloudera-scm-agentAgent启动后,CM Web UI会显示节点列表。此时才能对CDH Parcel执行“分配”→“激活”。激活成功后,CM会自动在/opt/cloudera/parcels/下创建软链接CDH指向CDH-5.15.1-1.cdh5.15.1.p0.4,这是所有服务启动的基准路径。
3.4 核心服务启动与首个HDFS格式化
服务启动顺序有严格依赖:必须先启动ZooKeeper(若启用),再启动HDFS,最后启动YARN。CDH 5.15.1的HDFS NameNode格式化是离线部署的“临门一脚”,极易失败:
# 进入CM Web UI,选择HDFS服务 → “操作” → “格式化 Namenode” # 若失败,查看日志:/var/log/hadoop-hdfs/hadoop-cmf-hdfs-NAMENODE-*.log # 常见错误及修复: # 错误1:Permission denied for /var/lib/hadoop-hdfs/cache # 修复:sudo chown -R hdfs:hdfs /var/lib/hadoop-hdfs/ # 错误2:Cannot create directory /dfs/nn/current # 修复:sudo mkdir -p /dfs/nn && sudo chown -R hdfs:hdfs /dfs/nn # 错误3:Java heap space OOM during format # 修复:编辑/etc/hadoop/conf/hadoop-env.sh,增加: # export HADOOP_NAMENODE_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m"格式化成功后,启动HDFS服务。此时检查HDFS健康状态:
# 切换到hdfs用户 sudo su - hdfs # 查看NameNode状态 hdfs haadmin -getServiceState nn1 # 应输出 active # 创建测试目录 hdfs dfs -mkdir -p /user/hive/warehouse # 上传测试文件(验证DataNode连通性) echo "offline deploy success" | hdfs dfs -put - /test.txt hdfs dfs -cat /test.txt # 应输出 offline deploy success经验:
hdfs dfs -put命令若超时,大概率是DataNode未启动或防火墙阻断50010端口。检查/var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.log中的Starting DataNode日志。
4. 离线环境下的故障诊断:从日志定位到根因修复
离线部署最痛苦的不是安装,而是故障排查——没有Google,没有Stack Overflow,只能靠日志和经验。以下是我在三个不同项目中遇到的高频问题及闭环解决方案。
4.1 CM Agent注册失败:SSL证书验证绕过
现象:CM Web UI中节点状态为“未知”,Agent日志/var/log/cloudera-scm-agent/cloudera-scm-agent.log持续报错:
ERROR Heartbeater:142: Failed to connect to server at https://<cm-server-ip>:7183 SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)根因:CM Agent默认启用SSL双向认证,而离线环境无法获取CA证书。解决方案不是禁用SSL(不安全),而是导出CM Server的证书并信任它:
# 在CM Server上导出证书 sudo openssl x509 -in /var/lib/cloudera-scm-server/certs/server.cert.pem -out /tmp/cm-server.crt # 在Agent节点导入证书 sudo cp /tmp/cm-server.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust # 重启Agent sudo systemctl restart cloudera-scm-agent注意:
update-ca-trust命令是CentOS 7的关键,它会将证书合并到/etc/pki/tls/certs/ca-bundle.crt,Agent启动时自动加载。
4.2 HiveServer2启动失败:Python路径污染
现象:Hive服务启动后立即退出,日志/var/log/hive/hiveserver2.log显示:
ImportError: No module named thrift.transport根因:CDH 5.15.1的HiveServer2使用Python 2.7,但系统中存在/usr/local/lib/python2.7/site-packages/thrift(由pip安装),与CDH自带的/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hive/lib/pythrift-0.9.2-py2.7.egg冲突。Python优先加载/usr/local路径,导致版本不匹配。
修复方案(二选一):
- 方案A(推荐):清理系统Python路径
sudo rm -rf /usr/local/lib/python2.7/site-packages/thrift* sudo rm -rf /usr/local/lib/python2.7/site-packages/PyHive* - 方案B:强制Hive使用内置Python编辑
/etc/hive/conf/hive-env.sh,添加:export HIVE_SERVER2_PYTHON_PATH="/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hive/lib/pythrift-0.9.2-py2.7.egg"
4.3 YARN ResourceManager内存溢出:JVM参数硬编码
现象:ResourceManager启动后几秒内崩溃,/var/log/hadoop-yarn/yarn-yarn-resourcemanager-*.log报:
java.lang.OutOfMemoryError: Java heap space根因:CDH 5.15.1的/etc/hadoop/conf/yarn-env.sh中YARN_RESOURCEMANAGER_HEAPSIZE默认为1024,但此值在/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hadoop-yarn/bin/yarn脚本中被硬编码覆盖。必须同时修改两处:
# 修改配置文件 echo "export YARN_RESOURCEMANAGER_HEAPSIZE=4096" | sudo tee -a /etc/hadoop/conf/yarn-env.sh # 修改启动脚本(关键!) sudo sed -i 's/YARN_RESOURCEMANAGER_HEAPSIZE=1024/YARN_RESOURCEMANAGER_HEAPSIZE=4096/g' /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hadoop-yarn/bin/yarn提示:此类硬编码问题在CDH旧版本中普遍存在。排查思路是:
ps aux | grep ResourceManager查看实际启动命令,再反向定位脚本。
5. 稳定性加固与长期运维要点
离线集群上线只是起点,保障其三年稳定运行才是终极目标。以下是基于某省电力调度系统(7×24小时运行)的运维实践总结。
5.1 日志轮转策略:防止/var/log爆满
CDH服务日志默认不轮转,/var/log/hadoop-hdfs/单个hadoop-hdfs-namenode-*.log可达20GB。必须配置logrotate:
# 创建logrotate配置 sudo tee /etc/logrotate.d/cdh << 'EOF' /var/log/hadoop-*/hadoop-*.log { daily missingok rotate 30 compress delaycompress notifempty create 644 hdfs hdfs sharedscripts postrotate if [ -f /var/run/hadoop-hdfs/hadoop-hdfs-namenode.pid ]; then kill -USR1 $(cat /var/run/hadoop-hdfs/hadoop-hdfs-namenode.pid) fi endscript } EOF # 测试配置 sudo logrotate -d /etc/logrotate.d/cdh关键:
postrotate中的kill -USR1向NameNode发送信号,使其重新打开日志文件,避免轮转后日志丢失。
5.2 补丁管理:离线热补丁机制
CDH 5.15.1存在已知漏洞(如CVE-2019-10021),官方不再提供补丁。我们采用“离线热补丁”方案:将修复后的JAR包(如hadoop-common-2.6.0-cdh5.15.1.jar)放入/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hadoop/common/,并修改/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hadoop/common/hadoop-env.sh,在HADOOP_CLASSPATH中前置该路径:
export HADOOP_CLASSPATH="/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hadoop/common/patched:$HADOOP_CLASSPATH"5.3 备份与恢复:Parcels目录的原子化备份
/opt/cloudera/parcels/是CDH的核心,但直接tar备份会导致服务中断。我们使用LVM快照实现秒级备份:
# 假设/parcels挂载在/dev/vg01/lv_parcels sudo lvcreate -L 5G -s -n parcels_snap /dev/vg01/lv_parcels sudo mount /dev/vg01/parcels_snap /mnt/parcels-backup sudo tar -zcf /backup/cdh-parcels-$(date +%F).tar.gz -C /mnt/parcels-backup . sudo umount /mnt/parcels-backup sudo lvremove -f /dev/vg01/parcels_snap恢复时,只需解压到/opt/cloudera/parcels/并重启服务。此方案已在某银行灾备演练中验证,RTO<5分钟。
最后分享一个血泪教训:某次升级Hive版本后,因未同步更新/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hive/lib/hive-exec-*.jar的依赖JAR,导致所有Hive查询返回空结果。排查耗时17小时,最终发现是guava-11.0.2.jar版本冲突。自此,我们建立了一条铁律:任何JAR包替换,必须用jar -tf检查其MANIFEST.MF中的Class-Path,并确保所有依赖JAR版本一致。这条规则,比任何自动化脚本都可靠。