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,也不需要任何容器,操作与在前三台主机上做的几乎一模一样。

相关推荐
ERP面壁者2 小时前
Docker小白搭建xxl-job,mysql的过程日志
mysql·docker·容器
全栈工程师修炼指南2 小时前
Nginx | HTTP 反向代理:当缓存失效时如何减轻后端(上游)服务压力?
运维·网络协议·nginx·http·缓存
prettyxian2 小时前
【Linux】内核编织术:task_struct的动态网络
linux·运维·服务器
Danileaf_Guo2 小时前
OSPF路由引入的陷阱:为何Ubuntu上静态路由神秘消失?深挖FRR路由分类机制
linux·运维·网络·ubuntu·智能路由器
张某人的胡思乱想2 小时前
windows远程ubuntu
linux·运维·ubuntu
QT 小鲜肉2 小时前
【Linux命令大全】001.文件管理之mtoolstest命令(实操篇)
linux·运维·前端·笔记·microsoft
iconball2 小时前
个人用云计算学习笔记 --30 华为云存储云服务
运维·笔记·学习·华为云·云计算
catchadmin2 小时前
前后端分离框架 CatchAdmin V5 beta.2 发布 插件化与开发效率的进一步提升
运维·服务器
ocean21032 小时前
Linux面试题图解
linux·运维·服务器·面试·职场和发展