Hadoop 生态集群一键部署
如果你是第一次搭 Hadoop 全家桶(ZooKeeper、Hadoop HA、Spark、HBase、Hive、Kafka、Flume、Mahout、Flink),大概率经历过这种痛苦:每装一个组件都要看一篇文章、改一堆 xml、来回 scp 分发、启动顺序错了还要从头排查……整套搭下来没个一两天搞不定。
这是一套一键部署脚本:把配置全部收敛到一个文件里,上传到主节点,跑一条命令,脚本会自动完成所有组件的安装、初始化、分发和启动。日常的启停、自检、看日志也都有菜单,不用再记一堆命令。
这套脚本能装什么
| 组件 | 版本 | 说明 |
|---|---|---|
| JDK | 8u181 | 所有节点 |
| ZooKeeper | 3.8.5 | 所有节点组成集群 |
| Hadoop | 3.4.0 | HA 模式:3 NameNode + 3 ResourceManager + JournalNode + ZKFC 自动故障转移 |
| Spark | 3.4.3 | Standalone 集群,兼容 YARN,并自动做好 Hive on Spark 集成 |
| HBase | 2.6.0 | 分布式多 HMaster |
| Hive | 4.0.1 | MySQL 存元数据,Spark 做执行引擎 |
| Kafka | 3.4.0 | 每节点一个 broker |
| Flume | 1.9.0 | agent + 双 Collector 故障转移,采集日志落 HDFS |
| Mahout | 14.1 | 机器学习客户端工具 |
| Flink | 1.18.0 | YARN Session 模式,ZooKeeper 做 HA |
以默认的三节点 hadoop01 / hadoop02 / hadoop03 为例,角色分布大概是这样:
- hadoop01(主节点):MySQL、Hive、NameNode(nn1,默认 Active)、ResourceManager(rm1,默认 Active)、ZooKeeper、Spark Master、HBase 主 HMaster、Kafka broker 1、Flume agent、Mahout、Flink 客户端;
- hadoop02 / hadoop03:NameNode(Standby)、ResourceManager、JournalNode、DataNode、NodeManager、ZooKeeper、Spark Worker、HBase 备用 HMaster + RegionServer、Kafka broker 2/3、Flume collector1/2。
也就是说三台机器互相冗余,NameNode / ResourceManager 挂了可以自动切换,Flume 主 Collector 挂了数据会切到备用 Collector。
工作原理(30 秒看懂)
infographic sequence-zigzag-steps-underline-text
data
title Hadoop 集群自动部署流程
desc 从 Windows 本机上传部署文件,由主节点统一配置并分发至其他节点
items
- label Windows 本机
desc 使用 upload.ps1 / scp 上传 deploy/ 和 installer/
- label 主节点 hadoop01
desc 文件统一存放于 /export/deploy/
- label 统一配置
desc config/cluster.conf 作为集群唯一配置入口
- label 执行部署
desc components/00~90.sh 按顺序执行,并使用 conf/*.tpl 渲染配置
- label 其他节点
desc 主节点通过 ssh / scp 分发文件,各节点完成安装和服务启动
theme
palette
- #3b82f6
- #6366f1
- #8b5cf6
- #06b6d4
- #10b981
脚本内部主要做三件事:
- 读配置:所有节点、IP、版本、端口、密码、内存参数都在
cluster.conf一个文件里; - 渲染配置:每个组件的官方配置文件(core-site.xml、hive-site.xml、server.properties 等)都做成了模板,脚本按节点动态生成;
- 分发与执行:主节点通过 SSH 免密把目录分发到其他节点(tar 流式传输),再逐台启动服务并等待端口就绪。
所有运行日志都会写到 /export/deploy/log/,每个组件一个文件,出问题不用靠猜。
环境准备
建议准备三台全新安装的 Ubuntu 服务器(apt/yum 系统都兼容,但 Ubuntu/Debian 体验最好),并且满足:
- 三台机器内网互通,主机名建议直接叫
hadoop01/02/03(脚本也会自动设置主机名); - 每台机器至少有能 SSH 登录的管理员账号(Ubuntu 默认禁止 root SSH,用
ubuntu这类有 sudo 权限的账号); - 内存尽量 ≥ 16 GB / 节点(脚本默认给 YARN NodeManager 8 GB、Flink TaskManager 4 GB,小机器记得调低);
- 磁盘给足:离线安装包大约 3 GB,HDFS 数据还要单独占空间;
- 主节点能访问外网 apt 源;如果本地不放安装包,还需要能访问华为云镜像等下载站。
Step 1:修改集群配置
从仓库克隆代码后(或直接下载 zip),打开 deploy/config/cluster.conf,这是全流程唯一需要大改的文件:
# 节点列表与 IP(顺序一一对应)
NODES=(hadoop01 hadoop02 hadoop03)
NODE_IPS=(192.168.52.131 192.168.52.132 192.168.52.133)
MASTER_NODE=hadoop01
# 远程节点的管理员账号(首次 SSH 引导用,三台密码一致)
REMOTE_ROOT_USER="ubuntu"
REMOTE_ROOT_PASSWORD="你的远程管理员密码"
# 脚本会创建的业务用户 hadooper 的密码
HADOOPER_PASSWORD="你的业务用户密码"
# MySQL root 密码、Hive 元数据库账号
MYSQL_ROOT_PASSWORD=root123456
HIVE_DB_NAME=hive
HIVE_DB_USER=hive
HIVE_DB_PASSWORD=hive123456下面这几组也可以按需调整:组件版本文件名(必须和 installer/ 里的包一致)、各组件端口、各服务启动内存、组件安装目录(默认 /export/servers)。
⚠️ 仓库里自带的是演示密码,公开仓库请改成自己的,别把真实密码提交上去。
Step 2:准备安装包(可选,但强烈建议)
脚本的安装包策略是「三级兜底」:
- 集群
/export/software里已有 → 直接用; - 仓库本地
installer/目录有 → 上传时一起复制过去; - 都没有 → 主节点自动从华为云镜像 / Apache 官网
wget下载。
也就是说你什么都不放也能装,只是下载 Hadoop、Flink 这些大包会比较慢。建议提前把 cluster.conf 里列出的压缩包下载好、按文件名放进 installer/ 目录,上传一次搞定,部署速度快很多。
Step 3:上传到主节点
先在主节点上建好目录(如果还没有):
sudo mkdir -p /export && sudo chown -R $(whoami) /exportWindows 上直接用仓库自带的 PowerShell 脚本:
./upload.ps1 -HostName 192.168.52.131 -User rootupload.ps1 会把 deploy/ 和 installer/ 整个传到主节点的 /export/ 下,-User 换成你能 SSH 登录主机的账号即可。不想用脚本就手动 scp:
scp -r deploy installer ubuntu@192.168.52.131:/export/Step 4:一条命令开始部署
SSH 登录主节点,执行:
cd /export/deploy
sudo bash main.sh install脚本会按下面的顺序自动完成 13 个阶段:
安装包检查 → 基础环境 → JDK → MySQL → ZooKeeper → Hadoop HA
→ Spark → HBase → Hive → Kafka → Flume → Mahout → Flink部署期间你在终端会看到每一步的实时日志:
- 安装包检查:先确认所有安装包可用,缺了就自动下载;
- 基础环境:配置 hosts 和主机名、创建
hadooper用户、创建/export/、三台机器配置 SSH 免密、关闭防火墙、调大文件句柄和进程数限制。注意:如果主机名有变化,脚本会提示先重启三台机器再继续; - JDK / MySQL:JDK 分发到所有节点;MySQL 只装在主节点,并自动建好 Hive 元数据库和账号;
- ZooKeeper:三台组成集群,自动写 myid 并等选举完成;
- Hadoop HA:首次安装会自动格式化 NameNode、初始化 QJM 共享 edits、bootstrap standby、启动 ZKFC 并切主。这里耗时最长,耐心等;
- Spark / HBase / Hive:Spark Standalone 集群;HBase 主备 HMaster + RegionServer;Hive 自动初始化元数据 schema 并和 Spark 双向集成(把依赖 jar 拷到 HDFS);
- Kafka / Flume:每节点一个 broker;Flume 先启两个 collector 再启 agent,Agent 采集主节点上的
weblog.log写入 HDFS; - Mahout / Flink:Mahout 是纯客户端工具;Flink 以 YARN Session 方式启动,HA 状态放 ZooKeeper,元数据存 HDFS。
全部装完后脚本会自动按依赖顺序把所有服务启动起来。整个过程 20 分钟到 1 小时不等,主要取决于安装包下载速度和机器性能。
Step 5:验证部署结果
一键自检
sudo bash main.sh status # 各组件进程/状态总览
sudo bash main.sh test # 各组件自检test 不是简单 ping 一下,而是真的跑业务验证:
- HDFS:写文件、读文件、查 HA 状态;
- Spark:提交 SparkPi;
- HBase:建表 → put → get → scan → 删表;
- Hive:beeline 连 HiveServer2 执行
show databases; - Kafka:创建 topic、生产、消费;
- Flume:往
weblog.log写数据 → 验证 HDFS 文件增长 → 故意杀掉主 Collector → 验证备用 Collector 接管 → 自动恢复; - Flink:提交 WordCount 到 YARN Session 并检查 HDFS 输出。
浏览器确认
默认配置下可以直接访问:
| 服务 | 地址 |
|---|---|
| HDFS(NameNode) | http://hadoop01:9870 |
| YARN(ResourceManager) | http://hadoop01:8088 |
| Spark Master | http://hadoop01:8082 |
| HBase Master | http://hadoop01:16010 |
Flink 的 Web UI 通过 YARN 页面(8088)点进对应 Application 查看。
日常运维
不用记复杂命令,全部通过主菜单完成:
cd /export/deploy && sudo bash main.sh主菜单提供:
1) 一键部署全部 5) 集群状态总览
2) 一键启动全部 6) 安装包检查/补全
3) 一键停止全部 7) 按组件操作(二级菜单)
4) 一键测试全部 8) 查看日志也可以直接敲命令,比如只处理 Hadoop:
sudo bash main.sh start # 全部启动
sudo bash components/20_hadoop.sh status # 只看 Hadoop
sudo bash components/50_hive.sh test # 只测 Hive
sudo bash components/70_flume.sh menu # 进入 Flume 菜单每个组件脚本都支持 install / start / stop / test / status / log / menu 这几种动作,名字就是 00_packages.sh 到 90_flink.sh,看编号就能对上依赖顺序。
出问题先看日志:
tail -f /export/deploy/log/*.log日志按组件分文件:hadoop.log、hive.log、flink.log……菜单里也能直接选着看。
避坑指南(都是脚本里已经处理过的坑)
- Ubuntu 不能直接 SSH root:远程节点请填有 sudo 权限的普通账号,如
ubuntu; - 改了主机名要重启:基础环境那一步执行完如果提示主机名变化,先重启三台再继续,否则后面 SSH、hosts 会乱;
- 安装包不要放错文件名:
cluster.conf里的*_TAR变量必须和installer/里实际文件名一致,否则脚本会当作缺失重新下载; - Hadoop 别手滑重复格式化:脚本默认有保护(已有格式化标记就跳过),想彻底重建才用
FORCE=1 sudo bash components/20_hadoop.sh install; - 单组件失败不用全量重来:修好问题后单独重跑失败的那个组件即可,其他组件不受影响;
- Flume 需要至少 3 台机器:agent 和两个 collector 各占一台,少于 3 台就别装 Flume;
- 资源别给太抠:默认 YARN NodeManager 8 GB、Flink TaskManager 4 GB,小内存机器先改
cluster.conf里的内存参数再部署; - 离线环境:把安装包装进
installer/一起上传,MySQL 等系统包仍需要本地 apt 源。
喜欢的话,留下你的评论吧~