我的问题是从其他节点到主节点的从节点之间的连接 . 我有3个节点设置如下:

  • 1个节点,主节点和1个工作器在同一个docker上启动

  • 2节点,每个在docker上有1个worker

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 --port 7078 用于并置的从站

  • sbin/start-slave.sh spark://masterNodeIP:7077 --port 7078 为另外两个奴隶

之前引用的所有端口都从nodeMaster重定向到相应的docker .

因此,webUI向我显示我的集群有3个连接的节点,不幸的是,当它运行时,只有并置的节点正在工作,其他两个连续断开连接并重新连接到应用程序而不做任何事情 .

接下来,我尝试将 STANDALONE_SPARK_MASTER_HOST=172.xx.xx.xx 更改为nodeMasterIP的值为1,但是主节点未启动,并且由172.xxx地址(即masterNode中的docker ip地址)更改为2 . 第二次尝试工作,webUi向我显示以下地址 spark://172.xx.xx.xx:7077 . 然后奴隶成功连接,但两个外部奴隶再次没有任何活动迹象 .

编辑

Spark SPARK_PUBLIC_DNS and SPARK_LOCAL_IP on stand-alone cluster with docker containers给了我一部分的answear而不是我想要的那个,因为通过将 network_mode: "host" 添加到docker-compose.yml我成功地在 STANDALONE_SPARK_MASTER_HOST=ipNodeMaster Build 了我的集群并将奴隶连接到它 . 执行没问题但是在收集操作时停止了这个错误 org.apache.spark.shuffle.FetchFailedException: Failed to connect to xxx/yy.yy.yy.yy:36801 这似乎是一个端口问题 .

但我真正担心的是,我不想在masterNode的localhost上运行spark master docker,而是在自己的docker网络(“bridge”)上运行 .

谢谢你的忠实建议!