如何使用Docker创建分布式Spark集群

时间:2018-09-19 10:49:21

标签: docker apache-spark docker-compose

我正在尝试使用此docker-compose仅由一个工作人员创建一个分布式Spark集群

    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集群

1 个答案:

答案 0 :(得分:0)

如果问题出现在 Spark worker 的同一个端口,实际上你有两个选择:

  1. 根本不要公开工作人员的端口 - 您不需要它们让工作人员连接到主设备并工作。但可能这不方便,因为您无法访问工作人员的 WebUI
  2. 使用诸如“8081-8999:8081”之类的特殊语法,以便下一个以 docker-compose up --scale worker=2 开头的工作程序将使用不同的端口。