【仅公网互通的 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,专门针对这种"仅公网互通"的场景?这样你只需要一条命令就能拉起整个集群。

相关推荐
大大大大晴天20 小时前
每天认识一个组件:数据治理Apache Atlas
大数据
数字新视界20 小时前
2026模块化机房选型指南:行业市场发展趋势、占有率与竞争梯队分析报告解析
大数据·人工智能·物联网·数据中心·微模块机房·模块化机房·冷通道
姜穆澜1 天前
OneID 从 0 到 1 完整生产案例(四)
大数据
OsDepK1 天前
项目快速Git至仓库(完整版)
大数据·git·elasticsearch·搜索引擎
合米AI SOP系统1 天前
传统产线如何快速上马落地 AI 防错?合米科技 AI SOP 7天即可上线。
大数据·人工智能·科技
思录Echo1 天前
什么决定具身智能的最终走向?多技术路线与落地现实辨析
大数据·人工智能
xiaohaiAIgeo1 天前
【2026年】AI监控加行为分析守护实验室安全
大数据·人工智能·科普知识
林墨聊AIGC1 天前
动漫AI视频创作工具在哪找到的?2026年最新动漫AI视频平台与软件指南
大数据·人工智能·ai作画·aigc·音视频
故七月1 天前
告别 AI 时代品牌 “隐身”:万域智瞰 AI‑GEO,构建品牌大模型时代营销新基建
大数据·人工智能
数字孪生视频孪生1 天前
三维实时重构异构底座 核工危化无感定位跨境轨迹一屏统揽
大数据·运维·人工智能·重构·架构