基于Docker Compose的Spark与Hadoop集群部署指南
2025-07-08 06:23:21作者:宗隆裙
概述
本文将详细介绍如何使用Docker Compose快速部署一个包含Hadoop和Spark的分布式计算环境。这个配置来自一个技术演示项目,它展示了如何将大数据生态中的两个核心组件——Hadoop和Spark——集成在一个容器化的环境中。
架构设计
该Docker Compose文件定义了一个完整的分布式系统架构,包含以下核心组件:
-
Hadoop集群:
- 1个NameNode(主节点)
- 3个DataNode(数据节点)
- 1个ResourceManager(资源管理器)
- 1个NodeManager(节点管理器)
- 1个HistoryServer(历史服务器)
-
Spark集群:
- 1个Master节点
- 1个Worker节点
这种架构模拟了生产环境中常见的Hadoop+Spark组合,其中Hadoop提供分布式存储(HDFS)和资源管理(YARN),而Spark则作为分布式计算框架运行其上。
详细配置解析
Hadoop组件配置
NameNode
- 使用
bde2020/hadoop-namenode:1.1.0-hadoop2.7.1-java8
镜像 - 挂载了两个卷:一个用于持久化NameNode数据,另一个用于存放输入文件
- 暴露了50070端口,这是HDFS的Web UI端口
- 通过环境变量
CLUSTER_NAME
设置集群名称
DataNode
- 配置了3个数据节点(datanode1, datanode2, datanode3)
- 每个节点都有独立的持久化卷
- 依赖于NameNode启动
ResourceManager
- Hadoop YARN的资源管理器
- 依赖于NameNode和DataNode
HistoryServer
- 存储和展示MapReduce作业历史
- 有独立的持久化卷存储时间线数据
Spark组件配置
Master节点
- 使用
gettyimages/spark:2.3.0-hadoop-2.8
镜像 - 配置为Spark Standalone模式的Master
- 暴露了多个端口,包括:
- 7077: Spark Master的主端口
- 8080: Spark Master的Web UI
- 4040: Spark应用的Web UI
- 挂载了配置文件目录、数据目录和JAR包目录
Worker节点
- 连接到Master节点
- 配置了2个CPU核心和1GB内存
- 暴露了8081端口作为Worker的Web UI
- 同样挂载了配置和数据目录
部署步骤
- 确保已安装Docker和Docker Compose
- 将配置文件保存为
docker-compose.yml
- 在文件所在目录执行:
docker-compose up -d
- 等待所有容器启动完成
访问服务
部署完成后,可以通过以下方式访问各个服务:
- HDFS Web UI: http://localhost:50070
- Spark Master Web UI: http://localhost:8080
- Spark Worker Web UI: http://localhost:8081
- Spark应用UI: http://localhost:4040
持久化存储
配置中定义了多个Docker卷用于数据持久化:
hadoop_namenode
: NameNode的元数据hadoop_datanode1/2/3
: 三个DataNode的数据存储hadoop_historyserver
: 历史服务器的时间线数据
这种设计确保了即使容器重启,关键数据也不会丢失。
环境变量配置
所有Hadoop组件都使用了同一个环境文件hadoop.env
,这有助于集中管理配置参数,如HDFS副本数、内存设置等。
实际应用建议
- 资源调整:根据实际需求调整Worker节点的CPU和内存配置
- 扩展性:可以轻松增加更多Worker节点来提高计算能力
- 数据管理:通过挂载的
/input_files
目录可以方便地将数据导入HDFS - 应用部署:将Spark应用JAR包放入挂载的
/jars
目录即可在集群中运行
总结
这个Docker Compose配置提供了一个完整的大数据开发环境,特别适合以下场景:
- 本地开发和测试Spark应用
- 学习Hadoop和Spark的集成
- 快速搭建原型环境
- 教学和演示目的
通过容器化技术,开发者可以避免复杂的集群配置过程,快速获得一个功能完整的大数据处理环境。