【仅公网互通的 Spark 集群通信与配置实战方案】

Spark 集群公网互通场景配置方案


🗂️ 地址规划

  • 公网地址:

    • Master 节点:100.112.4.22 (主控节点,master-node)
    • Worker 节点1:100.112.5.61 (worker-node1)
    • Driver 节点(Client 模式提交任务):100.112.6.32
  • 假设的内网地址(不可互通,仅作为说明):

    • Master 节点:172.31.1.34
    • Worker 节点1:122.31.1.34
    • Driver 节点:182.31.1.34

背景:三台机器只有公网互通,内网不可互通。Spark 集群必须依赖公网 IP 进行通信。此时如果直接在 spark-env.sh 中设置 SPARK_MASTER_HOST=master-node(解析到公网),Master 启动会失败,因为 Spark 尝试绑定一个并未直接配置在网卡上的公网地址。解决办法是 监听本机可绑定地址(0.0.0.0 或内网 IP),公布公网地址用于访问


📌 /etc/hosts 统一方案

在三台机器的 /etc/hosts 中统一配置:

bash 复制代码
100.112.4.22   master-node
100.112.5.61   worker-node1
100.112.6.32   driver-node

注意:这里仅映射公网地址,不要混入内网地址,避免解析冲突。


⚙️ Master 节点 $SPARK_HOME/conf/spark-env.sh

bash 复制代码
#!/usr/bin/env bash
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

# Master 监听所有网卡,避免绑定公网失败
export SPARK_MASTER_HOST=0.0.0.0
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8080

# 公布公网地址(UI、集群信息显示用)
export SPARK_PUBLIC_DNS=100.112.4.22

# Worker / Driver 常用端口
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_DRIVER_PORT=7080
export SPARK_BLOCKMANAGER_PORT=7081

export SPARK_LOG_DIR=$SPARK_HOME/logs

⚙️ Worker 节点 $SPARK_HOME/conf/spark-env.sh

Worker1(100.112.5.61):

bash 复制代码
#!/usr/bin/env bash
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

# 公布公网地址
export SPARK_PUBLIC_DNS=100.112.5.61

export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_DRIVER_PORT=7080
export SPARK_BLOCKMANAGER_PORT=7081

export SPARK_LOG_DIR=$SPARK_HOME/logs

启动 Worker:

bash 复制代码
$SPARK_HOME/sbin/start-worker.sh spark://100.112.4.22:7077

📄 spark-defaults.conf(可选)

在 Master 节点配置(Driver 公网可回连):

bash 复制代码
spark.driver.host        100.112.6.32
spark.driver.port        7080
spark.driver.bindAddress 0.0.0.0

💻 Driver 端参数指定方案(Client 模式)

Driver 在 100.112.6.32 上运行,代码示例:

java 复制代码
SparkConf conf = new SparkConf();

// 资源配置
conf.set("spark.executor.instances", "6");
conf.set("spark.executor.cores", "8");
conf.set("spark.executor.memory", "16g");
conf.set("spark.driver.memory", "8g");

// Master 公网地址
conf.set("spark.master", "spark://100.112.4.22:7077");

// Driver 公网地址(必须是 Worker 可达)
conf.set("spark.driver.host", "100.112.6.32");
conf.set("spark.driver.port", "7080");
conf.set("spark.driver.bindAddress", "0.0.0.0");

🚀 总结

  • SPARK_MASTER_HOST :不要直接设为公网映射的主机名,否则启动失败。应设为 0.0.0.0 或本机内网 IP。
  • SPARK_PUBLIC_DNS:公布公网地址,供 UI 和集群信息显示。
  • Worker:通过公网地址注册到 Master。
  • Driver:必须指定公网 IP,保证 Executor 能回连。
  • hosts:统一映射公网地址,避免混入内网。

要不要我帮你写一个 完整的启动顺序脚本(start-all.sh,专门针对这种"仅公网互通"的场景?这样你只需要一条命令就能拉起整个集群。

相关推荐
智能相对论7 小时前
CES深度观察丨智能清洁的四大关键词:变形、出户、体验以及生态协同
大数据·人工智能
焦耳热科技前沿9 小时前
北京科技大学/理化所ACS Nano:混合价态Cu₂Sb金属间化合物实现高效尿素电合成
大数据·人工智能·自动化·能源·材料工程
min18112345610 小时前
深度伪造内容的检测与溯源技术
大数据·网络·人工智能
武子康10 小时前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
数据智研10 小时前
【数据分享】(2005–2016年)基于水资源承载力的华北地区降水与地下水要素数据
大数据·人工智能·信息可视化·数据分析
TDengine (老段)12 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
亚古数据12 小时前
亚古数据:查询斯里兰卡公司可以获取什么文件和信息?
大数据·亚古数据·斯里兰卡公司查询
WLJT12312312312 小时前
守护自然与滋养民生的绿色之路
大数据·安全
min18112345612 小时前
PC端零基础跨职能流程图制作教程
大数据·人工智能·信息可视化·架构·流程图
静听松涛13313 小时前
中文PC端多人协作泳道图制作平台
大数据·论文阅读·人工智能·搜索引擎·架构·流程图·软件工程