文章目录
- 一、完整操作记录总结
-
- 环境
- [📝 第一轮操作: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 角色)原理解读)
-
- [第一轮操作:Parcel 文件部署(CDH 二进制文件)](#第一轮操作:Parcel 文件部署(CDH 二进制文件))
- 第二轮操作:配置文件复制与分发
- [2. 整体逻辑总结](#2. 整体逻辑总结)
- [3. 如何测试是否成功](#3. 如何测试是否成功)
- 三、第四台节点部署
-
- 如果第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. 已完成的操作流程:
- ✅ Parcel部署:将CDH 6.3.2 Parcel从CM Server复制到三节点,解压并创建符号链接
- ✅ 配置分发:从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 fs、hive、impala-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/。
- Parcel 文件(
- 以上手动操作等价于 :
- 直接 scp parcel 文件到节点(cluster-1/2/3),在 cluster-1 上从容器复制。
- 手动
tar -zxvf解压(模拟 CM Agent 的 unpack)。 - 手动
ln -s创建/opt/cloudera/parcels/CDH符号链接(模拟"Activate")。 - 效果 :三台主机现在都有完整的 CDH 二进制文件,可以运行客户端命令(如
hadoop、hive),路径统一指向活跃版本。 - 为什么有效:CDH 的客户端脚本不依赖 CM Server,只要路径和符号链接正确,就能找到 jar/lib/bin。
- 注意事项 :
- 在 cluster-1 上把 parcel 从容器取出时放到了
/data/cloudera/parcel,但没用到它(因为直接在/opt/cloudera/parcels/解压)。 - 手动方式不支持多版本并存和自动回滚(Parcels 的优势),升级时需手动清理旧目录。
- 在 cluster-1 上把 parcel 从容器取出时放到了
第二轮操作:配置文件复制与分发
- 标准客户端配置原理 :
- 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) → 可以像集群节点一样运行客户端工具,而无需启动任何服务。
- 从容器内(CM Server 生成的配置)复制所有
- 为什么放在 /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 等)运行时只需要两样东西:
- 二进制文件:来自 Parcel 解压后的 /opt/cloudera/parcels/CDH/... 目录
- 客户端配置文件:包含集群地址、安全配置等,通常放在 /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,也不需要任何容器,操作与在前三台主机上做的几乎一模一样。