用74LS138和74LS273玩转8086:手把手教你搭建一个能读开关、亮LED的微型计算机I/O系统
2026/5/6 5:45:29
公网地址:
100.112.4.22(主控节点,master-node)100.112.5.61(worker-node1)100.112.6.32假设的内网地址(不可互通,仅作为说明):
172.31.1.34122.31.1.34182.31.1.34背景:三台机器只有公网互通,内网不可互通。Spark 集群必须依赖公网 IP 进行通信。此时如果直接在
spark-env.sh中设置SPARK_MASTER_HOST=master-node(解析到公网),Master 启动会失败,因为 Spark 尝试绑定一个并未直接配置在网卡上的公网地址。解决办法是监听本机可绑定地址(0.0.0.0 或内网 IP),公布公网地址用于访问。
/etc/hosts统一方案在三台机器的/etc/hosts中统一配置:
100.112.4.22 master-node100.112.5.61 worker-node1100.112.6.32 driver-node注意:这里仅映射公网地址,不要混入内网地址,避免解析冲突。
$SPARK_HOME/conf/spark-env.sh#!/usr/bin/env bashexportJAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64# Master 监听所有网卡,避免绑定公网失败exportSPARK_MASTER_HOST=0.0.0.0exportSPARK_MASTER_PORT=7077exportSPARK_MASTER_WEBUI_PORT=8080# 公布公网地址(UI、集群信息显示用)exportSPARK_PUBLIC_DNS=100.112.4.22# Worker / Driver 常用端口exportSPARK_WORKER_WEBUI_PORT=8081exportSPARK_DRIVER_PORT=7080exportSPARK_BLOCKMANAGER_PORT=7081exportSPARK_LOG_DIR=$SPARK_HOME/logs$SPARK_HOME/conf/spark-env.shWorker1(100.112.5.61):
#!/usr/bin/env bashexportJAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64# 公布公网地址exportSPARK_PUBLIC_DNS=100.112.5.61exportSPARK_WORKER_WEBUI_PORT=8081exportSPARK_DRIVER_PORT=7080exportSPARK_BLOCKMANAGER_PORT=7081exportSPARK_LOG_DIR=$SPARK_HOME/logs启动 Worker:
$SPARK_HOME/sbin/start-worker.sh spark://100.112.4.22:7077在 Master 节点配置(Driver 公网可回连):
spark.driver.host100.112.6.32 spark.driver.port7080spark.driver.bindAddress0.0.0.0Driver 在100.112.6.32上运行,代码示例:
SparkConfconf=newSparkConf();// 资源配置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");0.0.0.0或本机内网 IP。要不要我帮你写一个完整的启动顺序脚本(start-all.sh),专门针对这种“仅公网互通”的场景?这样你只需要一条命令就能拉起整个集群。