首页 > 解决方案 > 如何使用 Docker 创建分布式 Spark 集群

问题描述

我正在尝试使用这个 docker-compose 创建一个只有一个工作人员的分布式火花集群

    master:
  image: gettyimages/spark:2.0.0-hadoop-2.7
  command: bin/spark-class org.apache.spark.deploy.master.Master -h master
  hostname: master
  container_name: spark-master
  environment:
    SPARK_CONF_DIR: /conf
    SPARK_PUBLIC_DNS: <MASTER IP>
  expose:
    - 7001
    - 7002
    - 7003
    - 7004
    - 7005
    - 7077
    - 6066
  ports:
    - 4040:4040
    - 6066:6066
    - 7077:7077
    - 8080:8080
  volumes:
    - ./conf/master:/conf
    - ./data:/tmp/data
    - ~/spark/data/:/spark/data/

worker:
  image: gettyimages/spark:2.0.0-hadoop-2.7
  command: bin/spark-class org.apache.spark.deploy.worker.Worker spark://master:7077
  hostname: worker
  container_name: spark-worker
  environment:
    SPARK_CONF_DIR: /conf
    SPARK_WORKER_CORES: 2
    SPARK_WORKER_MEMORY: 1g
    SPARK_WORKER_PORT: 8881
    SPARK_WORKER_WEBUI_PORT: 8081
    SPARK_PUBLIC_DNS: <WORKER IP>
  links:
    - master
  expose:
    - 7012
    - 7013
    - 7014
    - 7015
    - 8881
  ports:
    - 8081:8081
  volumes:
    - ./conf/worker:/conf
    - ./data:/tmp/data
    - ~/apps/sparkapp/worker/data:/spark/data/

但问题是 docker 守护进程正在同一台机器上创建容器。这消除了分布式网络的全部意义。如何使用 docker 创建分布式 Spark 集群

标签: dockerapache-sparkdocker-compose

解决方案


如果 Spark 工作人员的相同端口出现问题,实际上您有两种选择:

  1. 根本不要暴露工人的端口 - 你不需要它们让工人连接到主人和工作。但这可能不方便,因为您无法访问工作人员的 WebUI
  2. 使用像“8081-8999:8081”这样的特殊语法,这样下一个开始的工作人员docker-compose up --scale worker=2将使用不同的端口。

推荐阅读