在网络"网桥"中的码头工人上Spark独立集群



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

  • 在同一docker上启动了1个节点,其中master和1个worker
  • 2个节点,每个节点有1名工人

码头工人组成了开放的这些端口:

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"

我的问题是从节点到主节点的从节点之间的连接,所以我首先启动mastersbin/start-master.sh。在我的第一次尝试中,前两行被评论,大师从这个地址开始spark://c96____37fb:7077.我使用以下命令成功连接了节点:

  • sbin/start-slave.shspark://c96____37fb:7077--端口7078用于并置的从机
  • sbin/start-slave.shspark://masterNodeIP:7077--端口7078用于另外两个从机

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

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

接下来,我尝试将STANDARONE_SPARK_MASTER_HOST=172.xx.xx.xx更改为值1,即nodeMasterIP,但主机未启动,值2由172.xxx地址更改,172.xxx地址是masterNode内的docker ip地址。第二次尝试成功,webUi向我显示了以下地址spark://172.xx.xx.xx:7077。然后从机成功连接,但两个外部从机再次没有任何活动迹象。

编辑

带有docker容器的独立集群上的Spark Spark_PUBLIC_DNS和Spark_LOCAL_IP为我提供了一部分answear,但不是我想要的,因为通过将network_mode:"host">添加到docker-compose.yml,我成功地在STANDARONE_PARK_MASTER_host=ipNodeMaster上构建了我的集群,并将从属服务器连接到它。执行正常,但在收集操作时停止,并出现此错误org.apache.spark.shuffle.FetchFailedException:未能连接到xxx/yy.yy.yy:36801,这似乎是端口问题。

但我真正担心的是,我不想在master Node的localhost上运行spark master docker,而是在它自己的docker网络("桥")上运行。

谢谢你的忠告!

我尝试了另一种方法,在主VM和从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编写

下面是为从vm 编写的docker

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: /opt/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