首页
/ 基于Docker Compose的Spark与Hadoop集群部署指南

基于Docker Compose的Spark与Hadoop集群部署指南

2025-07-08 06:23:21作者:宗隆裙

概述

本文将详细介绍如何使用Docker Compose快速部署一个包含Hadoop和Spark的分布式计算环境。这个配置来自一个技术演示项目,它展示了如何将大数据生态中的两个核心组件——Hadoop和Spark——集成在一个容器化的环境中。

架构设计

该Docker Compose文件定义了一个完整的分布式系统架构,包含以下核心组件:

  1. Hadoop集群

    • 1个NameNode(主节点)
    • 3个DataNode(数据节点)
    • 1个ResourceManager(资源管理器)
    • 1个NodeManager(节点管理器)
    • 1个HistoryServer(历史服务器)
  2. 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
  • 同样挂载了配置和数据目录

部署步骤

  1. 确保已安装Docker和Docker Compose
  2. 将配置文件保存为docker-compose.yml
  3. 在文件所在目录执行:docker-compose up -d
  4. 等待所有容器启动完成

访问服务

部署完成后,可以通过以下方式访问各个服务:

  • 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副本数、内存设置等。

实际应用建议

  1. 资源调整:根据实际需求调整Worker节点的CPU和内存配置
  2. 扩展性:可以轻松增加更多Worker节点来提高计算能力
  3. 数据管理:通过挂载的/input_files目录可以方便地将数据导入HDFS
  4. 应用部署:将Spark应用JAR包放入挂载的/jars目录即可在集群中运行

总结

这个Docker Compose配置提供了一个完整的大数据开发环境,特别适合以下场景:

  • 本地开发和测试Spark应用
  • 学习Hadoop和Spark的集成
  • 快速搭建原型环境
  • 教学和演示目的

通过容器化技术,开发者可以避免复杂的集群配置过程,快速获得一个功能完整的大数据处理环境。