如何使用 Docker 部署 Spark 集群

 更新时间:2025年02月18日 11:59:44   作者:库库林_沙琪马  
本文介绍了如何通过DockerCompose部署一个Spark集群,包括一个Master节点和多个Worker节点,环境要求包括DockerEngine、DockerCompose和网络环境,通过配置docker-compose.yml文件,可以定义和运行多容器应用,感兴趣的朋友一起看看吧

Apache Spark 是一个统一的分析引擎,用于大规模数据处理。使用 Docker 部署 Spark 集群是一种简便且高效的方式。本文将详细介绍如何通过 Docker Compose 部署一个 Spark 集群,包括一个 Master 节点和多个 Worker 节点。

环境要求

在开始部署之前,请确保以下环境已准备就绪:

  • Docker Engine:安装并运行 Docker。
  • Docker Compose:安装 Docker Compose,用于定义和运行多容器应用。
  • 网络环境:确保主机可以连接到 Docker Hub 以下载镜像。

Docker Compose 配置文件

以下是用于部署 Spark 集群的 docker-compose.yml 文件:

version: '3'
services:
  master:
    image: bitnami/spark:3.5.4
    container_name: master
    user: root
    environment:
      - SPARK_MODE=master
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
      - SPARK_MASTER_WEBUI_PORT=8080
      - SPARK_MASTER_PORT=7077
    ports:
      - '8080:8080'
      - '7077:7077'
    volumes:
      - ./python:/python
  worker1:
    image: bitnami/spark:3.5.4
    container_name: worker1
    user: root
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://master:7077
      - SPARK_WORKER_MEMORY=1G
      - SPARK_WORKER_CORES=1
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
    depends_on:
      - master
  worker2:
    image: bitnami/spark:3.5.4
    container_name: worker2
    user: root
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://master:7077
      - SPARK_WORKER_MEMORY=1G
      - SPARK_WORKER_CORES=1
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
    depends_on:
      - master
networks:
  default:
    driver: bridge

配置详解

Master 节点配置

  • 镜像:使用 bitnami/spark:3.5.4 镜像。
  • 容器名称:指定容器名称为 master
  • 用户:以 root 用户运行容器。
  • 环境变量
    • SPARK_MODE=master:指定节点模式为 Master。
    • SPARK_MASTER_WEBUI_PORT=8080:设置 Web UI 访问端口。
    • SPARK_MASTER_PORT=7077:设置 Spark Master 通信端口。
  • 端口映射
    • 8080:8080:映射 Web UI 端口。
    • 7077:7077:映射 Spark Master 端口。
  • 卷挂载:将主机的 ./python 目录挂载到容器的 /python 目录。

Worker 节点配置

  • 镜像:同样使用 bitnami/spark:3.5.4 镜像。
  • 容器名称:分别指定为 worker1 和 worker2
  • 用户:以 root 用户运行容器。
  • 环境变量
    • SPARK_MODE=worker:指定节点模式为 Worker。
    • SPARK_MASTER_URL=spark://master:7077:指定 Master 节点的 URL。
    • SPARK_WORKER_MEMORY=1G:配置 Worker 节点的内存。
    • SPARK_WORKER_CORES=1:配置 Worker 节点的 CPU 核数。
  • 依赖:指定 Worker 节点依赖 Master 节点,确保 Master 节点先启动。

网络配置

  • 使用桥接网络,将所有容器连接到同一个网络中,以便它们可以互相通信。

部署 Spark 集群

步骤 1:创建 Docker Compose 文件

将上述配置内容保存为 docker-compose.yml 文件。

步骤 2:构建并启动容器

在终端中,进入包含 docker-compose.yml 文件的目录,并运行以下命令:

docker compose up -d
  • up:构建并启动容器。
  • -d:后台运行。

步骤 3:验证集群状态

启动容器后,可以通过以下方式验证集群状态:

查看容器状态

docker compose ps

预期输出:

访问 Spark Web UI

打开浏览器,访问 http://{你的虚拟机Ip}:8080,即可看到 Spark Master 的 Web UI,显示所有 Worker 节点的连接状态。

验证 Worker 节点连接

在 Web UI 中,导航到 http://{你的虚拟机Ip}:8080,检查 "Workers" 标签页,应显示 worker1 和 worker2 已连接。

步骤 4:运行 Spark 作业

为了验证 Spark 集群的功能,可以运行一个简单的 Spark 作业。以下是一个示例:

方法一:在 Master 容器内部运行 Spark 作业

进入 Master 容器

docker compose exec master bash

运行 Spark PI 示例:

/opt/bitnami/spark/bin/spark-shell --master spark://master:7077
或者
$SPARK_HOME/bin/spark-shell --master spark://master:7077

在 Spark Shell 中运行以下代码:

val numSamples = 100000000
val count = sc.parallelize(1 to numSamples).count()
println(s"Pi is roughly ${count * 4.0 / numSamples}")

方法二:通过 Python 提交 Spark 作业

假设你有一个 Python 脚本 pi.py,内容如下:

from pyspark.sql import SparkSession
if __name__ == "__main__":
    spark = SparkSession.builder.appName("Pi Calculator").getOrCreate()
    numSamples = 100000000
    count = spark.sparkContext.parallelize(range(1, numSamples)).count()
    print(f"Pi is roughly {4.0 * count / numSamples}")
    spark.stop()

 将 pi.py 放在 ./python 目录下,然后提交作业:

docker-compose exec master /opt/bitnami/spark/bin/spark-submit --master spark://master:7077 /python/pi.py

运行结果:

步骤 5:停止和清理(注意,这个不是让你测试的,看清楚)

完成测试后,可以停止并删除容器:

docker compose down

总结

通过以上步骤,你已经成功使用 Docker 部署了一个 Spark 集群,包括一个 Master 节点和两个 Worker 节点。这种部署方式具有以下优势:

  • 快速部署:通过 Docker Compose 一键式部署,无需手动配置每个节点。
  • 资源隔离:每个节点运行在独立的容器中,资源分配清晰。
  • 易于扩展:可以轻松添加或删除 Worker 节点以适应不同的工作负载。
  • 环境一致性:所有节点使用相同的 Spark 镜像,确保环境一致。

你可以根据需要调整 docker-compose.yml 文件中的配置,例如增加 Worker 节点的数量、调整内存和 CPU 核数等。希望这篇文章能帮助你快速上手 Spark 集群的 Docker 部署!

到此这篇关于如何使用 Docker 部署 Spark 集群的文章就介绍到这了,更多相关Docker 部署 Spark 集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Docker容器跨主机通信的方法

    详解Docker容器跨主机通信的方法

    本篇文章主要介绍了详解Docker容器跨主机通信的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Alpine镜像中如何安装telnet

    Alpine镜像中如何安装telnet

    BusyBox是一个在嵌入式系统和资源受限环境中广泛使用的工具集合,它为用户提供了轻量级、功能强大和灵活的命令行工具集,这篇文章主要介绍了Alpine镜像中安装telnet,需要的朋友可以参考下
    2024-06-06
  • Docker如何实现修改Docker0网桥默认网段

    Docker如何实现修改Docker0网桥默认网段

    这篇文章主要介绍了Docker如何实现修改Docker0网桥默认网段,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Docker安装Oracle创建表空间并导入数据库完整步骤

    Docker安装Oracle创建表空间并导入数据库完整步骤

    Docker提供了一种简便的方式,通过容器化我们可以在任何支持Docker 的环境中快速部署Oracle数据库,这篇文章主要介绍了Docker安装Oracle创建表空间并导入数据库的相关资料,需要的朋友可以参考下
    2025-04-04
  • 宿主机无法访问docker容器中nginx服务的问题解决

    宿主机无法访问docker容器中nginx服务的问题解决

    在虚拟机中部署Docker并安装Nginx后,宿主机无法访问容器内的Nginx服务,通过检查端口映射、防火墙状态、进入容器内部启动Nginx以及检查/修改内核的IP转发设置,解决了该问题,感兴趣的可以了解一下
    2024-11-11
  • Docker compose安装部署创建自定义网络使用举例

    Docker compose安装部署创建自定义网络使用举例

    这篇文章主要为大家介绍了Docker compose安装部署创建自定义网络使用举例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • docker各种报错解决方案小结

    docker各种报错解决方案小结

    最近在学习docker的时候遇到了不少问题,索性给大家整理下,下面这篇文章主要给大家介绍了关于docker各种报错解决的相关资料,文中介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 详解利用nginx和docker实现一个简易的负载均衡

    详解利用nginx和docker实现一个简易的负载均衡

    本篇文章主要介绍了利用nginx和docker实现一个简易的负载均衡 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Docker 部署Django项目的方法示例

    Docker 部署Django项目的方法示例

    这篇文章主要介绍了Docker 部署Django项目的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • docker一键部署MySQL的实现示例

    docker一键部署MySQL的实现示例

    本文主要介绍了docker一键部署MySQL的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论