You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YARN运行Spark/DeltaLake作业报错setsid not found求助

解决YARN容器启动报错"setsid: not found"的方案

问题根源

YARN容器启动时的环境变量PATH与登录用户的PATH不一致,导致容器内无法找到setsid命令,进而触发AM容器启动失败。

具体解决步骤

1. 直接指定setsid绝对路径(推荐)

修改YARN核心配置文件yarn-site.xml,添加或更新以下配置项,强制容器使用setsid的绝对路径:

<property>
    <name>yarn.nodemanager.container-executor.setsid-path</name>
    <value>/usr/bin/setsid</value>
</property>

配置完成后,重启所有YARN ResourceManager和NodeManager服务。

2. 让容器继承完整PATH环境变量

修改yarn-site.xml中的环境变量白名单,将PATH加入其中,确保容器能获取到系统完整的PATH:

<property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH,PATH</value>
</property>

同样需要重启YARN服务使配置生效。

3. 临时测试:在提交脚本中显式设置PATH

如果需要快速验证,可以在spark-submit命令前显式指定包含/usr/bin的PATH:

PATH=$PATH:/usr/bin spark-submit \
--class com.example.shuffleSortMergeJoin.Main \
--master $4 \
--deploy-mode $DEPLOY_MODE \
--packages io.delta:delta-core_2.13:2.4.0 \
/home/hduser/projects/spark/shuffleSortMergeJoin/target/scala-2.13/shufflesortmergejoin_2.13-0.1.0-SNAPSHOT.jar $1 $2 $3 $4 $5

4. 验证节点上的setsid状态

在所有YARN集群节点上执行以下命令,确认setsid的存在性和权限:

  • 检查路径:which setsid,确保输出为/usr/bin/setsid
  • 检查权限:ls -l /usr/bin/setsid,确保权限为-rwxr-xr-x(所有用户可执行)

关联模式差异说明

Standalone client模式下,作业提交进程运行在本地,使用当前用户的完整PATH,因此不会出现该问题;而YARN模式和Standalone cluster模式均在集群节点的容器中启动进程,容器默认的环境变量受限,这是两类模式出现差异的核心原因。

内容的提问来源于stack exchange,提问作者Rene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:57:19