CDH6.3.2集群docker容器化离线部署客户端parcel+配置全流程详解

文章目录

  • 一、完整操作记录总结
    • 环境
    • [📝 第一轮操作:Parcel文件分发与部署](#📝 第一轮操作:Parcel文件分发与部署)
      • [1. 从CM Server容器复制Parcel文件](#1. 从CM Server容器复制Parcel文件)
      • [2. 分发Parcel到其他节点](#2. 分发Parcel到其他节点)
      • [3. 在三台节点上执行Parcel部署](#3. 在三台节点上执行Parcel部署)
    • [📝 第二轮操作:配置文件复制与分发](#📝 第二轮操作:配置文件复制与分发)
      • [1. 在CM Server容器内收集配置文件](#1. 在CM Server容器内收集配置文件)
      • [2. 从容器复制配置文件到宿主机](#2. 从容器复制配置文件到宿主机)
      • [3. 分发配置文件到其他节点](#3. 分发配置文件到其他节点)
      • [4. 在cluster-2和cluster-3上解压配置](#4. 在cluster-2和cluster-3上解压配置)
    • [📊 操作总结](#📊 操作总结)
      • [1. 已完成的操作流程:](#1. 已完成的操作流程:)
      • [2. 使用的文件路径:](#2. 使用的文件路径:)
      • [3. 涉及的三台服务器:](#3. 涉及的三台服务器:)
  • 二、操作规范原理解读
    • [1. 手动部署 CDH "本地客户端"(Gateway 角色)原理解读](#1. 手动部署 CDH “本地客户端”(Gateway 角色)原理解读)
    • [2. 整体逻辑总结](#2. 整体逻辑总结)
    • [3. 如何测试是否成功](#3. 如何测试是否成功)
      • 基本环境检查
      • [HDFS 客户端测试(连接到远程 HDFS)](#HDFS 客户端测试(连接到远程 HDFS))
      • [YARN 客户端测试](#YARN 客户端测试)
      • [Hive 客户端测试(如果配置中有 Hive)](#Hive 客户端测试(如果配置中有 Hive))
      • [其他组件测试(根据你的 etc 中是否有配置)](#其他组件测试(根据你的 etc 中是否有配置))
      • 常见问题排查
  • 三、第四台节点部署
    • 如果第4台节点也想访问CDH集群
    • 核心原理(与前三台完全一致)
    • [在 cluster-4 上具体操作步骤(推荐方式)](#在 cluster-4 上具体操作步骤(推荐方式))
      • [步骤 1:准备 Parcel 二进制(两种方式任选其一)](#步骤 1:准备 Parcel 二进制(两种方式任选其一))
      • [步骤 2:复制客户端配置文件](#步骤 2:复制客户端配置文件)
      • [步骤 3:设置环境变量(可选但强烈推荐)](#步骤 3:设置环境变量(可选但强烈推荐))
      • [步骤 4:在 cluster-4 上测试(与之前三台完全相同)](#步骤 4:在 cluster-4 上测试(与之前三台完全相同))
    • 注意事项
    • 总结

一、完整操作记录总结

环境

节点 服务
cluster-1 server+Agent
cluster-2 agent
cluster-3 agent

采用分布式docker容器化,离线部署CDH集群客户端。

📝 第一轮操作:Parcel文件分发与部署

1. 从CM Server容器复制Parcel文件

bash 复制代码
# 在宿主机cluster-1上执行
docker cp cdh-cluster-1:/opt/cloudera/parcel-repo/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel /data/cloudera/parcel

/data/cloudera/作为容器中取文件到宿主机的中转存储目录。

2. 分发Parcel到其他节点

在宿主机 /data/cloudera/parcel目录执行:

bash 复制代码
# 分发到cluster-2
scp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel root@cluster-2:/opt/cloudera/parcels/

# 分发到cluster-3  
scp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel root@cluster-3:/opt/cloudera/parcels/

宿主机的/opt/cloudera/parcels/目录也要cp一份,以便于进行parcel部署。

3. 在三台节点上执行Parcel部署

bash 复制代码
# 在cluster-1, cluster-2, cluster-3上分别执行相同操作:

# 进入parcel目录
cd /opt/cloudera/parcels

# 解压parcel文件(直接解压到当前目录)
tar -zxvf CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel

# 创建符号链接
ln -s CDH-6.3.2-1.cdh6.3.2.p0.1605554 CDH

📝 第二轮操作:配置文件复制与分发

1. 在CM Server容器内收集配置文件

从cluster-1进入容器。

bash 复制代码
# 进入CM Server容器
docker exec -it cdh-cluster-1 /bin/bash

# 创建配置目录
mkdir -p /opt/cloudera/etc

# 复制各类配置文件
cp -Lvr /etc/hadoop /opt/cloudera/etc
cp -Lvr /etc/hadoop-httpfs /opt/cloudera/etc
cp -Lvr /etc/hadoop-kms /opt/cloudera/etc
cp -Lvr /etc/hbase /opt/cloudera/etc
cp -Lvr /etc/hbase-solr /opt/cloudera/etc
cp -Lvr /etc/hive /opt/cloudera/etc
cp -Lvr /etc/hive-hcatalog /opt/cloudera/etc
cp -Lvr /etc/hive-webhcat /opt/cloudera/etc
cp -Lvr /etc/impala /opt/cloudera/etc
cp -Lvr /etc/kafka /opt/cloudera/etc
cp -Lvr /etc/kudu /opt/cloudera/etc
cp -Lvr /etc/pig /opt/cloudera/etc
cp -Lvr /etc/sentry /opt/cloudera/etc
cp -Lvr /etc/solr /opt/cloudera/etc
cp -Lvr /etc/spark /opt/cloudera/etc
cp -Lvr /etc/spark2 /opt/cloudera/etc
cp -Lvr /etc/zookeeper /opt/cloudera/etc

# 打包配置文件
cd /opt/cloudera/
tar -czvf etc.tar.gz etc

2. 从容器复制配置文件到宿主机

bash 复制代码
# 回到宿主机cluster-1执行
docker cp cdh-cluster-1:/opt/cloudera/etc.tar.gz /data/cloudera/

/data/cloudera/作为容器中取文件到宿主机的中转存储目录。

3. 分发配置文件到其他节点

bash 复制代码
# 进入存放配置的目录
cd /data/cloudera/

# 分发到cluster-2
scp etc.tar.gz root@cluster-2:/opt/cloudera

# 分发到cluster-3
scp etc.tar.gz root@cluster-3:/opt/cloudera

4. 在cluster-2和cluster-3上解压配置

  • cluster-1 同样执行 /opt/cloudera/ 目录的分发和解压。
bash 复制代码
# 在cluster-2和cluster-3上分别执行:

# 进入cloudera目录
cd /opt/cloudera/

# 解压配置文件
tar -zxvf etc.tar.gz

📊 操作总结

1. 已完成的操作流程:

  1. ✅ Parcel部署:将CDH 6.3.2 Parcel从CM Server复制到三节点,解压并创建符号链接
  2. ✅ 配置分发:从CM Server收集配置文件,打包分发到三节点并解压

2. 使用的文件路径:

  • Parcel文件/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
  • 解压目录/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554
  • 符号链接/opt/cloudera/parcels/CDH -> CDH-6.3.2-1.cdh6.3.2.p0.1605554
  • 配置文件包/data/cloudera/etc.tar.gz(宿主机)和 /opt/cloudera/etc.tar.gz(节点)
  • 解压配置/opt/cloudera/etc/ cluster-1、2、3目录

3. 涉及的三台服务器:

  • cluster-1:Cloudera Manager Server + Agent
  • cluster-2:Agent节点
  • cluster-3:Agent节点

二、操作规范原理解读

1. 手动部署 CDH "本地客户端"(Gateway 角色)原理解读

该操作本质上是手动模拟 Cloudera Manager 的 Parcels 分发 + 客户端配置部署 ,目的是在三台节点主机上安装一个纯 CDH 客户端环境 (也称为 Gateway 节点),而不是完整的集群服务(NameNode、DataNode 等)。这允许这些主机(或容器)作为 Hadoop/Hive/Impala 等组件的客户端,使用命令行工具(如 hadoop fshiveimpala-shell)连接到远程 CDH 集群。

Cloudera Manager 正常情况下会自动处理这些,但当前选择了离线手动方式,绕过了 CM 的 Parcels 管理机制。以下是详细逻辑解释:

第一轮操作:Parcel 文件部署(CDH 二进制文件)

  • 标准 Parcels 结构和激活原理
    • Parcel 文件(.parcel)是一个压缩包,包含 CDH 所有组件的二进制文件(jar、bin、lib 等)。
    • Cloudera Manager Agent 会自动解压到 /opt/cloudera/parcels/<完整版本目录>/(例如 /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/)。
    • 然后创建符号链接 /opt/cloudera/parcels/CDH → 该版本目录(这相当于"激活")。
    • CDH 的命令脚本(如 /opt/cloudera/parcels/CDH/bin/hadoop)会通过环境变量(如 $HADOOP_HOME)指向这个活跃目录。
    • 关键路径:所有 Hadoop 相关库在 /opt/cloudera/parcels/CDH/lib/,命令在 /opt/cloudera/parcels/CDH/bin/
  • 以上手动操作等价于
    • 直接 scp parcel 文件到节点(cluster-1/2/3),在 cluster-1 上从容器复制。
    • 手动 tar -zxvf 解压(模拟 CM Agent 的 unpack)。
    • 手动 ln -s 创建 /opt/cloudera/parcels/CDH 符号链接(模拟"Activate")。
    • 效果 :三台主机现在都有完整的 CDH 二进制文件,可以运行客户端命令(如 hadoophive),路径统一指向活跃版本。
    • 为什么有效:CDH 的客户端脚本不依赖 CM Server,只要路径和符号链接正确,就能找到 jar/lib/bin。
  • 注意事项
    • 在 cluster-1 上把 parcel 从容器取出时放到了 /data/cloudera/parcel,但没用到它(因为直接在 /opt/cloudera/parcels/ 解压)。
    • 手动方式不支持多版本并存和自动回滚(Parcels 的优势),升级时需手动清理旧目录。

第二轮操作:配置文件复制与分发

  • 标准客户端配置原理
    • Cloudera Manager 会生成客户端配置文件(core-site.xml、hdfs-site.xml、hive-site.xml 等),包含集群地址(NameNode、ResourceManager、HiveServer2 等)、安全配置(Kerberos)、高可用等。
    • 这些配置默认放在 /etc/<service>/conf/(如 /etc/hadoop/conf//etc/hive/conf/)。
    • 但在 Parcels 部署下,CM 会额外把这些配置"部署"到 /opt/cloudera/parcels/CDH/etc/<service>/ 或类似路径(有时称为 "cloudera/etc")。
    • 客户端命令(如 hadoop fs)会优先读取这些配置目录(通过环境变量如 HADOOP_CONF_DIR)。
  • 手动操作等价于
    • 从容器内(CM Server 生成的配置)复制所有 /etc/<service>/ 目录,打包成 etc.tar.gz
    • 分发到三台主机的 /opt/cloudera/ 并解压到 /opt/cloudera/etc/
    • 效果 :模拟了 CM 的 "Deploy Client Configuration" 操作,让客户端命令知道去哪里连接集群(例如 core-site.xml 中的 fs.defaultFS = hdfs://nameservice1)。
    • 这就是"本地客户端"的核心:二进制(Parcels) + 配置(etc) → 可以像集群节点一样运行客户端工具,而无需启动任何服务。
  • 为什么放在 /opt/cloudera/etc/
    • 这不是标准系统路径(通常是 /etc/),而是 Parcels 专用的"client config" 位置。
    • CDH 的环境脚本(在 bin 目录下)会自动添加这个路径到 classpath 和 conf dir,让命令优先使用这里配置(覆盖或补充系统 /etc/)。

2. 整体逻辑总结

  • 目标 :让三台主机成为 CDH Gateway 节点(纯客户端),可以提交 MapReduce/Spark 作业、查询 Hive/Impala、操作 HDFS。
  • 手动 vs CM 自动
    • CM 会通过 Parcels 页面自动 Download/Distribute/Activate + 自动 Deploy Client Configuration。
    • 手动做这些,适用于离线环境或自定义控制。
  • 优势:快速、一致,三台主机配置完全相同。
  • 潜在风险:配置不完整(如缺少安全设置)、权限不对(建议 chown -R cloudera-scm 或 root)、未来升级麻烦。

3. 如何测试是否成功

三台主机任意一台(包括 cluster-1)上执行以下命令测试(无需 sudo,除非权限问题)。前提:配置中已正确指向你的实际集群(NameNode 等地址)。

基本环境检查

bash 复制代码
# 检查符号链接
ls -l /opt/cloudera/parcels/CDH

# 检查二进制路径
/opt/cloudera/parcels/CDH/bin/hadoop version   # 应显示 Hadoop 2.6.0-cdh6.3.2

# 检查配置目录
ls /opt/cloudera/etc/hadoop/   # 应看到 core-site.xml、hdfs-site.xml 等

HDFS 客户端测试(连接到远程 HDFS)

bash 复制代码
# 列出根目录
hadoop fs -ls /

# 创建测试目录
hadoop fs -mkdir /test_client

# 上传本地文件(例如 /etc/hosts)
hadoop fs -put /etc/hosts /test_client/

# 查看
hadoop fs -ls /test_client/
hadoop fs -cat /test_client/hosts

# 清理
hadoop fs -rm -r /test_client
  • 成功:说明 HDFS 客户端正常,能连接 NameNode。

YARN 客户端测试

bash 复制代码
# 查看集群资源
yarn node -list

# 运行简单 MR 作业(计算 Pi)
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
  • 成功:作业提交到 YARN 并计算出结果。

Hive 客户端测试(如果配置中有 Hive)

bash 复制代码
hive -e "SHOW TABLES;"   # 或进入 hive> 提示符
  • 如果有 HiveServer2,beeline 更好:
bash 复制代码
beeline -u "jdbc:hive2://your-hiveserver2-host:10000"

其他组件测试(根据你的 etc 中是否有配置)

  • Impala:impala-shell -i your-impala-daemon-host
  • Pig:pig -x mapreduce
  • Spark:/opt/cloudera/parcels/CDH/bin/spark-submit --class ...

常见问题排查

  • 命令 not found :添加环境变量 export PATH=$PATH:/opt/cloudera/parcels/CDH/bin
  • 连接失败 :检查 /opt/cloudera/etc/hadoop/core-site.xml 中的 fs.defaultFS 是否正确;如果 Kerberos,需 kinit。
  • 权限问题:确保 /opt/cloudera/parcels 和 etc 目录可读(chmod -R 755 或 chown)。

三、第四台节点部署

如果第4台节点也想访问CDH集群

第四台主机(假设叫 cluster-4)即使完全没有运行任何 Cloudera Manager 的容器、服务或 Agent,也可以通过完全手动的方式安装 CDH 客户端(即 Gateway 角色),从而实现提交任务到你的三节点集群(cluster-1/2/3)运行。

这种方式在生产环境中非常常见,常用于:

  • 边缘节点(Edge Node)
  • 应用服务器
  • 开发机、跳板机
  • 提交 Spark、MapReduce、Hive、Impala 等作业的节点

核心原理(与前三台完全一致)

CDH 的客户端工具(hadoop、hive、beeline、spark-submit、impala-shell 等)运行时只需要两样东西:

  1. 二进制文件:来自 Parcel 解压后的 /opt/cloudera/parcels/CDH/... 目录
  2. 客户端配置文件:包含集群地址、安全配置等,通常放在 /opt/cloudera/etc/ 或 /etc/ 下

只要这两样东西在 cluster-4 上准备好,并且版本与集群(CDH 6.3.2)一致,客户端就能正常连接并提交任务到 cluster-1/2/3 的 NameNode、ResourceManager、HiveServer2、Impala Daemon 等服务上运行。

在 cluster-4 上具体操作步骤(推荐方式)

当前已经在cluster-1(或任意一台已有客户端的主机)上获取文件。

步骤 1:准备 Parcel 二进制(两种方式任选其一)

方式 A:直接复制已解压的整个版本目录(推荐,更简单可靠)

bash 复制代码
# 在 cluster-1(已有客户端)上执行
tar -czf /tmp/CDH-6.3.2-parcel-dir.tar.gz /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554

# 复制到 cluster-4
scp /tmp/CDH-6.3.2-parcel-dir.tar.gz root@cluster-4:/opt/cloudera/parcels/

# 在 cluster-4 上解压并创建符号链接
ssh root@cluster-4
mkdir -p /opt/cloudera/parcels
cd /opt/cloudera/parcels
tar -xzf CDH-6.3.2-parcel-dir.tar.gz
ln -s CDH-6.3.2-1.cdh6.3.2.p0.1605554 CDH

方式 B:复制原始 .parcel 文件并手动解压(与你之前操作一致)

bash 复制代码
# 从 cluster-1 的 /data/cloudera/parcel/ 或其他节点复制原始 parcel 文件
scp root@cluster-1:/data/cloudera/parcel/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel root@cluster-4:/opt/cloudera/parcels/

# 在 cluster-4 上
cd /opt/cloudera/parcels
tar -zxvf CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
ln -s CDH-6.3.2-1.cdh6.3.2.p0.1605554 CDH

步骤 2:复制客户端配置文件

最简单可靠的方式:直接复制已有的 etc 目录

bash 复制代码
# 在 cluster-1 上打包已有配置
tar -czf /tmp/cloudera-etc.tar.gz /opt/cloudera/etc

# 复制到 cluster-4
scp /tmp/cloudera-etc.tar.gz root@cluster-4:/opt/cloudera/

# 在 cluster-4 上解压
ssh root@cluster-4
cd /opt/cloudera/
tar -xzf cloudera-etc.tar.gz

步骤 3:设置环境变量(可选但强烈推荐)

在 cluster-4 的用户 ~/.bash_profile 或 /etc/profile.d/ 中添加:

bash 复制代码
export PATH=$PATH:/opt/cloudera/parcels/CDH/bin
# 如果需要 spark 等
export PATH=$PATH:/opt/cloudera/parcels/CDH/bin/spark-submit
# 可选:让 hadoop 命令优先使用该配置
export HADOOP_CONF_DIR=/opt/cloudera/etc/hadoop

生效:

bash 复制代码
source ~/.bash_profile

步骤 4:在 cluster-4 上测试(与之前三台完全相同)

bash 复制代码
# 检查版本
hadoop version    # 应显示 Hadoop 2.6.0-cdh6.3.2

# HDFS 操作
hadoop fs -ls /
hadoop fs -put /etc/hosts /test_from_cluster4
hadoop fs -ls /test_from_cluster4

# YARN 提交简单任务
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100

# Hive(如果配置中有 HiveServer2)
beeline -u "jdbc:hive2://你的HiveServer2主机:10000"

# Spark(如果有)
spark-submit --class org.apache.spark.examples.SparkPi \
  /opt/cloudera/parcels/CDH/lib/spark/examples/jars/spark-examples*.jar 10

注意事项

  • 版本必须一致:Parcel 版本必须和集群当前的激活版本(CDH-6.3.2-1.cdh6.3.2.p0.1605554)完全一致。
  • 配置必须同步:尤其是 core-site.xml、hdfs-site.xml、yarn-site.xml、hive-site.xml 中的服务地址和 HA 配置要正确。
  • Kerberos 安全:如果你的集群启用了 Kerberos,需要在 cluster-4 上配置 krb5.conf、kinit 获取票据。
  • 权限:建议目录权限 755,文件 644,所有者可设为普通用户(如 hadoop 或你的登录用户)。
  • 未来维护:配置变更后,需要手动同步 etc 目录到 cluster-4。

总结

第四台主机完全可以通过已熟练掌握的"parcel + 配置手动分发"方式,变成一个纯 CDH 客户端节点,实现向 cluster-1/2/3 提交任务。

整个过程不需要安装 Cloudera Manager Agent,也不需要任何容器,操作与在前三台主机上做的几乎一模一样。

相关推荐
Leinwin4 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382504 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇4 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7595 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣5 小时前
智能体选型实战指南
运维·人工智能
yy55275 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ6 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔8 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密8 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20158 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑