对于zookeeper故障转移设置,docker服务发现是否可以正常使用spark独立集群和spark-master处于复制模式?

时间:2018-01-10 23:10:38

标签: apache-spark docker pyspark docker-swarm

假设我有一个看起来像这样的Docker堆栈:

version: '3.3'
services:
  spark-master:
    image: gettyimages/spark
    networks:
      - sparknet
    environment:
      MASTER: spark://spark-master:7077
      SPARK_CONF_DIR: /conf
    ports:
      - target: 4040
        published: 4040
        protocol: tcp
        mode: host
      - target: 6066
        published: 6066
        protocol: tcp
        mode: host
      - target: 7077
        published: 7077
        protocol: tcp
        mode: host
      - target: 8080
        published: 8080
        protocol: tcp
        mode: host
    volumes:
      - spark-master-conf:/conf
      - spark-data:/tmp/data
    deploy:
      placement:
        constraints:
          - node.labels.sparkrole == master
    command: bin/spark-class org.apache.spark.deploy.master.Master


  spark-worker:
    image: gettyimages/spark
    networks:
      - sparknet
    depends_on:
      - spark-master
    environment:
      SPARK_CONF_DIR: /conf
      SPARK_WORKER_CORES: 2
      SPARK_WORKER_MEMORY: 2g
      SPARK_WORKER_PORT: 8881
      SPARK_WORKER_WEBUI_PORT: 8080
      SPARK_MASTER_URL: spark://spark-master:7077
    volumes:
      - spark-worker-conf:/conf
      - spark-data:/tmp/data
    command: bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077

networks:
  sparknet:

我已经测试了这个,它在这个配置中工作正常。我可以轻松地使用docker service scale扩大和缩小工人数量,我可以提交工作,这一切都可以顺利进行。

现在我已经把注意力转向了可用性,我正在阅读有关standby masters coordinated with zookeeper的内容,这看起来很简单,但我唯一担心的是文档的以下部分:

  

为了安排新应用程序或将Worker添加到群集,   他们需要知道当前领导者的IP地址。这可以   通过简单地传递您曾经使用过的Masters列表来完成   传递一个。例如,您可以启动SparkContext   指向spark:// host1:port1,host2:port2。这会导致你的   SparkContext尝试注册两个主人 - 如果host1去   下来,这个配置仍然是正确的,因为我们找到了新的   领导者,主持人。

只需使用内置的服务发现docker提供就足够了吗?如果我将spark-master扩展到3个副本,并且我用“spark:// spark-master:7077”初始化SparkContext,它会解析为正确的领导节点吗?

相关问题:

  1. 如果SparkContext尝试向spark://spark-master:7077注册,但由于它被路由到不是当前领导者的复制主节点而失败,它会重试吗?
  2. 我想我可以通过在我的docker-compose文件中复制spark-master(IE Spark-master + spark-master-standy1 ...等)并在我的应用程序中初始化SparkContext来以一种黑客方式解决这个问题使用spark://spark-master:7077,spark-master-standby1:7077...,但这很容易缩放spark-master docker service scale,但这不会是世界末日。

    总结我的实际问题:

    1. Docker覆盖服务发现是否可以正常用于备用火花控制器
    2. SparkContext如何处理向领导者主人注册?它会在失败时重试吗?这可调吗?

0 个答案:

没有答案