一个容器
六个 Hadoop daemon 集中在一处,以更低的资源开销开始学习。
Hadoop 3.4.1 · 本地优先 · 开源
Hadoop Lab 把环境准备、服务观察、MapReduce、节点故障与恢复组织成一条可重复的学习路径。先从一个容器入门;当课程需要时,再展开三节点角色。
面向课堂、自学和本地实验,而不是生产 Hadoop 平台。
doctor → up → lesson → status
六个 Hadoop daemon 集中在一处,以更低的资源开销开始学习。
三个容器让服务分布和故障过程都可观察。
HDFS :9870
YARN :8088
History :19888
学习路径
每一步都会产生可以检查的证据。同一套课程 CLI 会检查就绪状态、解释失败原因,并让重置范围保持清晰可见。
在不覆盖现有选择的前提下创建本地配置;启动任何服务前,先检查 Docker、内存、端口和 Compose。
init · doctor
拉取公开的多架构镜像,选择 standalone 或 cluster,并等待预期服务进入健康状态。
up standalone · up cluster
提交内置 WordCount 作业或开始引导实验。输出保留在实验专属的 HDFS 路径,不会清除无关作业。
demo wordcount · lesson start
对照 Docker 健康状态、预期 JVM 进程、HDFS、YARN、JobHistory 和实验检查结果,而不是把容器正在运行当作成功依据。
status · open · logs · lesson check
停止服务时保留命名卷;可以重建运行时状态;只有实验需要全新环境时,才明确确认按模式删除数据。
stop · reset · reset --data
两种模式,一个模型
Standalone 降低第一课的硬件成本,同时保留核心 HDFS 与 YARN 概念。Cluster 模式随后让进程分布、SSH 和 DataNode 故障变得可见。
阅读架构说明按课程目标选择布局,而不是按“规格高低”
六个 daemon 位于一个容器。资源占用更低、反馈更快,观察界面保持一致。
三个容器。服务角色分开、支持跨节点 SSH,也能进行可恢复的节点故障实验。
管理 HDFS 命名空间元数据,同时提供本地 block 存储。
调度 YARN 作业、运行容器,并提供 HDFS 存储。
让 checkpoint、已完成作业和可恢复的 DataNode 故障过程变得可观察。
七个引导实验
每个实验都会说明目标、预期证据、原理解释、自动检查和最小可用重置。学生最终能够解释现象,而不只是留下一段终端记录。
区分容器健康、Java daemon 与浏览器观察界面。
理解 HDFS 命名空间,而不是把它与宿主机文件混为一谈。
串起输入、YARN 应用、reducer 与最终的 HDFS 输出。
区分 ResourceManager 的实时调度与 JobHistory 的已完成作业记录。
在三个节点上定位六项服务,并解释它们为何分开部署。
让一个 DataNode 离线,检查降级证据,再安全地恢复它。
追踪一个值如何从 .env 和 XML 模板进入实际生效的运行时配置。
建议的课堂顺序把同一组实验串成一次以证据为线索的课程。
打开教学指南为可观察而设计
生命周期 CLI 驱动 Docker Compose,运行时角色设置选择 daemon,同一套检查把容器状态与真实 Hadoop 进程和学习结果连接起来。
阅读运行与恢复说明把就绪检查、生命周期、实验、日志、诊断与重置整合为一个可发现的界面。
选择 standalone 或三节点布局,同时让配置与状态的归属保持明确。
运行时角色从同一份已发布的 Hadoop 3.4.1 镜像启动预期的 daemon 集合。
状态检查、实验检查、浏览器界面、日志和脱敏诊断包让行为可以被核对。
诊断包会排除 .env 与完整容器环境值,但分享前仍应人工检查每一个包。
诚实边界
明确边界能让破坏性实验更安全,也能缩小学习范围。生产 Hadoop 需要不同的架构与运维模型。
本实验室不模拟生产环境的身份认证、授权或企业身份集成。
没有 active/standby 控制面、故障转移控制器,也不作生产可用性承诺。
三个容器只是在一台本地 Docker 主机上模拟角色,不是分布式生产部署。
备份、升级、容量规划、监控运维与运行时服务等级均不在范围内。
源代码现已开放
使用 Docker Desktop,或带 Compose v2 的 Docker Engine。正常流程会拉取公开的多架构镜像;只有修改镜像本身时才需要在本地构建。
$ git clone https://github.com/QianQIUlp/docker-hadoop-cluster.git
$ cd docker-hadoop-cluster
$ ./hadoop-lab init
$ ./hadoop-lab doctor
$ ./hadoop-lab up standalone
$ ./hadoop-lab demo wordcount