Docker中的Spark独立群集在networking“桥”

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

  • 主节点和1个工作节点在同一个泊坞窗上启动1个节点
  • 2个节点,每个docker有1个工人

docker – 撰写这些端口:

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 。 在我第一次尝试的时候,第一行就被评论了,主人在这个地址开始了火花:// c96 ____ 37fb:7077。 我用这些命令连接成功的节点:

  • sbin / start-slave.sh spark:// c96 ____ 37fb:7077 –port 7078 for the collocated slave
  • sbin / start-slave.sh spark:// masterNodeIP:7077 –port 7078 for the other others slaves

之前引用的所有端口都从nodeMasterredirect到相应的docker。

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

接下来,我尝试将STANDALONE_SPARK_MASTER_HOST = 172.xx.xx.xx更改为nodeMasterIP的值1,但是主节点没有启动,而是通过172.xxx地址(它是masterNode内部的docker ip地址)的值。 第二次尝试工作,webUi给我看下面的地址spark://172.xx.xx.xx:7077 。 然后奴隶成功连接,但两个外部奴隶再也没有performance出任何活动的迹象。

编辑

Spark SPARK_PUBLIC_DNS和SPARK_LOCAL_IP在具有docker容器的独立群集中为我提供了answear的一部分,但不是我想要的,因为通过向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,而是在自己的dockernetworking(“bridge”)上运行。

谢谢你的build议!