apache-spark - 网络 “bridge”中docker上的Spark独立集群

标签 apache-spark docker cluster-computing docker-compose

我的问题是从节点到其他节点的从节点之间的连接。
我有3个节点设置,如下所示:

  • 在同一docker
  • 上启动了1个具有主节点和1个 worker 的节点
  • 2个节点,在docker
  • 上各有1个工作线程

    docker-compose打开这些端口:
    version: '2'
    services:
      spark:
        image: xxxxxxxx/spark
        tty: true
        stdin_open: true
        container_name: spark
        volumes:
         - /var/data/dockerSpark/:/var/data
    ports:
     - "7077:7077"
     - "127.0.0.1:8080:8080"
     - "7078:7078"
     - "127.0.0.1:8081:8081"
     - "127.0.0.1:9010:9010"
     - "4040:4040"
     - "18080:18080"
     - "6066:6066"
     - "9000:9000"
    

    conf / spark-env.sh如下:
     #export STANDALONE_SPARK_MASTER_HOST=172.xx.xx.xx #This is the docker Ip adress on the node
     #export SPARK_MASTER_IP=$STANDALONE_SPARK_MASTER_HOST
     export SPARK_WORKER_MEMORY=7g
     export SPARK_EXECUTOR_MEMORY=6G
     export SPARK_WORKER_CORES=4
     export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=86400 -Dspark.worker.cleanup.appDataTtl=86400"
    

    我的问题是从节点从另一个节点到主节点之间的连接,因此我首先启动主节点 sbin / start-master.sh
    在我的第一次尝试中,对第2行进行了评论,然后大师开始了此地址 spark:// c96 ____ 37fb:7077。
    我使用以下命令成功连接了节点:
  • sbin / start-slave.sh spark:// c96 ____ 37fb:7077-端口7078 用于并置的从属
  • sbin / start-slave.sh spark:// masterNodeIP:7077-端口7078 用于另外两个奴隶

  • 先前引用的所有端口都从nodeMaster重定向到相应的docker。

    因此,webUI向我显示了群集中有3个连接的节点,但是不幸的是,当群集运行时,只有并置的节点正在工作,另外两个节点不断断开连接并重新连接至应用程序,而没有执行任何操作。

    接下来,我尝试将 STANDALONE_SPARK_MASTER_HOST = 172.xx.xx.xx 的值更改为nodeMasterIP但主服务器未启动的值,以及2的172.xxx地址(即masterNode内部的docker ip地址)的值。第二次尝试成功,并且webUi向我显示了以下地址 spark://172.xx.xx.xx:7077
    然后,从属设备成功连接,但是两个外部从属设备均未显示任何 Activity 迹象。

    编辑

    Spark SPARK_PUBLIC_DNS and SPARK_LOCAL_IP on stand-alone cluster with docker containers给了我部分问题,但没有我想要的部分,因为通过在docker-compose.yml中添加 network_mode:“host” ,我成功地在 STANDALONE_SPARK_MASTER_HOST = ipNodeMaster 上建立了集群,并将奴隶连接到它。执行正常,但由于出现此错误 org.apache.spark.shuffle.FetchFailedException而停止在收集操作上:无法连接到xxx / yy.yy.yy.yy:36801 ,这似乎是端口问题。

    但我真正担心的是,我不想在masterNode的本地主机上运行spark master docker,而是在其自己的docker网络(“网桥”)上运行。

    谢谢您的明智建议!

    最佳答案

    我通过在主从VM的容器中触发Spark类尝试了另一种方法

      version: "2"
       services:
        spark-master:
         image: spark/mastertool:2.2.1
          command: /opt/spark/bin/spark-class org.apache.spark.deploy.master.Master
          hostname: spark-master
    
          environment:
            MASTER: spark://localhost:port
            SPARK_CONF_DIR: /opt/conf
            SPARK_PUBLIC_DNS: xxx.xxx.xxx.xxx
    
          ports:
           - 8080:8080
           - 7077:7077
           - 6066:6066
           - 4040:4040
    

    上面是主vm的docker-compose

    下面是docker-compose为slave vm
    version: "2"
    
    services:
     spark-worker:
      image: spark/workertool:2.2.1
       command: /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://private-ip-of-master_cluster:xxxx
       hostname: spark-worker
       environment:
         SPARK_CONF_DIR: /conf
         SPARK_PUBLIC_DNS: xx.xxx.xx.xxx
         SPARK_WORKER_CORES: 2
         SPARK_WORKER_MEMORY: 2g
         SPARK_WORKER_PORT: xxxx
         SPARK_WORKER_WEBUI_PORT: xxxx
    
       ports:
         - 8xxx:xxxx
    

    关于apache-spark - 网络 “bridge”中docker上的Spark独立集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41698811/

    相关文章:

    apache-spark - 如何修复“使用spark创建配置单元兽人表时权限被拒绝”?

    docker - Docker-传输数据库镜像及其内容

    cluster-computing - 如何在 Ganglia 上设置警报?

    cluster-computing - 使用新的 JOBID 重新排队 SLURM

    c# - 如何从 Hyper-V 集群中删除虚拟机?

    hadoop - Spark/Hadoop 为大型 LZO 文件抛出异常

    java - Spark kryo_serializers 和 Broadcast<Map<Object, Iterable<GowallaDataLocation>>> java.io.IOException : java. lang.UnsupportedOperationException

    docker - Windows Server Core Docker 容器网络问题

    authentication - 使用入门教程的 Docker 登录错误

    python - 使用 Apache-Spark 分析时间序列