如何在不重启Spark集群的前提下增加Worker节点(集群管理器为YARN)
YARN环境下无重启扩容Spark Worker节点操作方案
提示:如果你使用的是纯Spark on YARN模式(即Spark无独立Master/Worker进程,所有资源完全由YARN的ResourceManager调度),不需要单独扩容Spark Worker,只需要将新节点的YARN NodeManager加入集群,Spark任务会自动调度到新节点上。本方案针对Spark Standalone集群对接YARN作为存储/资源兜底的场景生效。
前置准备
- 新节点基础环境与现有集群节点完全对齐:JDK版本、Scala版本、Spark安装包版本、系统参数(文件句柄限制、swap配置等)保持一致
- 新节点与现有Spark Master、其他Worker节点的网络互通,相关通信端口(默认7077、8081、4040等)已放通
- 新节点已经完成YARN配置同步,NodeManager进程正常运行并向集群ResourceManager心跳汇报
具体操作步骤
- 同步现有Spark集群的所有配置文件到新节点的
$SPARK_HOME/conf目录下,核心文件包括spark-env.sh、spark-defaults.conf,以及关联的YARN配置文件core-site.xml、yarn-site.xml、hdfs-site.xml - 按需在新节点的
spark-env.sh中配置Worker资源参数,和现有节点对齐:export SPARK_WORKER_CORES=<单Worker可用CPU核数,和现有节点一致> export SPARK_WORKER_MEMORY=<单Worker可用内存,和现有节点一致> - 在新节点本地执行Worker启动命令,不需要操作现有集群的任何进程:
$SPARK_HOME/sbin/start-worker.sh spark://<Spark Master的主机名/IP>:<Master端口,默认7077> - 验证扩容结果:
- 新节点执行
ps -ef | grep org.apache.spark.deploy.worker.Worker确认进程正常运行 - 访问Spark Master WebUI(默认端口8080),确认新Worker节点出现在节点列表中,状态为ALIVE,资源参数正确
- 提交测试Spark任务,验证任务可以正常调度到新节点上运行,无报错
- 新节点执行
注意事项
- 整个扩容过程不会重启现有Master、Worker进程,对正在运行的Spark任务无任何影响
- 新节点的Spark版本必须和现有集群完全一致,否则会出现RPC通信异常,无法被Master节点识别纳入资源池
- 如果需要后续集群重启时新节点自动加入,可以将新节点的主机名/IP添加到Master节点的
$SPARK_HOME/conf/workers配置文件中,该修改不会即时生效,仅下次集群重启时生效 - 不要在新节点上重复执行Master启动命令,避免集群出现双Master异常(除非你配置了Master高可用)
- 如果你的Spark集群开启了认证、鉴权配置,需要提前在新节点上同步密钥、权限配置,避免Worker进程无法注册到Master
内容的提问来源于stack exchange,提问作者dahuin
相关产品推荐
相关产品推荐

