如何在Spark Master UI中修改Worker对外访问URL?
Docker部署Spark修改Master UI显示的Worker对外URL方案
需要在docker-compose文件中配置传入对应Spark启动参数即可实现,不需要修改Spark源码或额外配置文件。
默认Docker部署模式下,Spark Worker会把容器内部的主机名、网桥IP作为自身地址上报给Master,因此Master UI上会显示外部无法访问的容器内部地址,和提供的截图表现一致:
核心配置参数
Worker向Master注册时上报的对外地址由以下两个环境变量控制,直接在docker-compose的environment块中传入即可:
SPARK_LOCAL_HOSTNAME:优先级最高,直接指定Worker对外暴露的可访问IP/域名,Master UI上显示的Worker URL会优先使用这个值SPARK_PUBLIC_DNS:指定Worker的公网DNS域名,会作为Worker UI跳转链接的地址使用
注意:Master节点也需要配置SPARK_PUBLIC_DNS参数,否则Master UI自身的访问链接也会默认显示容器内部地址
docker-compose配置参考
version: "3.8" services: spark-master: image: bitnami/spark:3.5.1 # 替换为你实际使用的Spark镜像版本 container_name: spark-master environment: - SPARK_MODE=master # 替换为Master节点的对外公网IP/域名 - SPARK_PUBLIC_DNS=your-server-public-ip ports: - "7077:7077" # Spark集群通信端口 - "8080:8080" # Master UI端口 restart: unless-stopped networks: - spark-cluster spark-worker-1: image: bitnami/spark:3.5.1 container_name: spark-worker-1 environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://spark-master:7077 # 核心配置:替换为当前Worker节点的对外公网IP/域名 - SPARK_LOCAL_HOSTNAME=your-server-public-ip - SPARK_PUBLIC_DNS=your-server-public-ip # 以下资源配置按需调整 - SPARK_WORKER_CORES=4 - SPARK_WORKER_MEMORY=8G ports: - "8081:8081" # 第一个Worker的UI端口 depends_on: - spark-master restart: unless-stopped networks: - spark-cluster # 多Worker节点复制spark-worker-1配置即可,注意修改端口、SPARK_LOCAL_HOSTNAME为对应节点的值 networks: spark-cluster: driver: bridge
验证方式
配置完成后执行docker-compose up -d重启所有服务,等待1分钟左右Worker重新向Master完成注册,刷新Master UI页面,就能看到Worker URL已经更新为你配置的对外可访问地址。
需要提前确认安全组/防火墙已经开放对应端口:Master 7077、8080,每个Worker的随机通信端口(或固定配置SPARK_WORKER_PORT参数)、Worker UI 8081等端口的外部访问权限,否则配置完成后外部依然无法访问对应地址。
内容的提问来源于stack exchange,提问作者Vivek Trivedi
相关产品推荐
相关产品推荐

