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
相关产品推荐
相关产品推荐

