如何在EC2上后台运行PySpark Standalone程序
PySpark Standalone模式后台/守护进程运行方案
快速临时后台运行(适合短周期测试任务)
直接使用nohup配合后台运行符提交任务,执行后立刻释放当前终端,断开SSH连接也不会终止任务:
nohup spark-submit /path/to/your_pyspark_code.py > spark_runtime.log 2>&1 &
参数说明:
nohup:忽略终端挂断(SIGHUP)信号,避免SSH断开时进程被系统杀死> spark_runtime.log:将程序标准输出重定向到指定日志文件,避免输出刷屏2>&1:将错误输出合并到标准输出流,所有运行日志、报错信息统一写入日志文件- 末尾的
&:将命令放入后台执行,执行后立即返回终端操作权限
配套操作命令:
- 实时查看运行日志:
tail -f spark_runtime.log - 查找运行中的Spark提交进程:
ps aux | grep spark-submit - 手动终止任务:
kill <上一步查到的进程PID>
配置为systemd守护进程(适合生产长稳运行任务)
如果需要任务异常自动重启、开机自启,可通过系统systemd托管为标准服务:
- 创建服务配置文件
/etc/systemd/system/pyspark_standalone.service,写入以下内容(替换占位路径为你EC2上的实际路径):
[Unit] Description=Standalone mode PySpark job After=network.target [Service] User=ec2-user WorkingDirectory=/home/ec2-user/spark_workspace ExecStart=/opt/spark/bin/spark-submit /home/ec2-user/spark_workspace/your_job.py Restart=on-failure RestartSec=5 StandardOutput=append:/home/ec2-user/spark_workspace/job_runtime.log StandardError=append:/home/ec2-user/spark_workspace/job_error.log [Install] WantedBy=multi-user.target
- 执行以下命令加载配置、启动服务并设置开机自启:
sudo systemctl daemon-reload sudo systemctl start pyspark_standalone.service sudo systemctl enable pyspark_standalone.service
配套服务管理命令:
- 查看任务运行状态:
systemctl status pyspark_standalone.service - 停止运行中的任务:
systemctl stop pyspark_standalone.service - 重启任务:
systemctl restart pyspark_standalone.service - 实时查看运行日志:
journalctl -u pyspark_standalone.service -f
虚拟终端方案(适合需要随时切回交互查看输出的场景)
如果需要随时回到任务运行界面查看实时输出,可使用screen创建虚拟会话:
- 执行
screen -S pyspark_job创建命名虚拟会话 - 在打开的会话窗口中正常执行
spark-submit命令提交任务 - 按下快捷键
Ctrl+A后再按D,即可退出当前虚拟会话回到原终端,任务会在后台持续运行 - 需要切回任务界面时,执行
screen -r pyspark_job即可恢复会话
注意:未做上述处理直接关闭运行spark-submit的SSH终端时,系统会向所有前台进程发送终止信号,直接导致Spark任务异常退出。
内容的提问来源于stack exchange,提问作者Nagababu
相关产品推荐
相关产品推荐

