无法连接PySpark YARN资源管理器,容器脚本语法异常求助
问题排查与解决
核心原因
报错信息里的launch_container.sh: 第55行:寻找匹配的"'时遇到意外的EOF是关键线索,说明YARN生成的容器启动脚本在解析环境变量时出现引号不匹配问题。从打印的PATH变量可以看到存在/snap/bin :/snap/bin内容——/snap/bin`后多了一个空格,这会导致shell脚本处理环境变量时解析出错,进而引发容器启动失败,最终导致Spark无法连接YARN资源管理器。
解决步骤
修正PATH环境变量
- 找到用户级或系统级环境变量配置文件(如
~/.bashrc、~/.profile或/etc/profile) - 定位设置PATH的行,移除多余空格,将
/snap/bin :/snap/bin修改为/snap/bin:/snap/bin - 执行
source ~/.bashrc(对应你修改的配置文件)使修改生效,或重新登录会话
- 找到用户级或系统级环境变量配置文件(如
调整Spark代码的配置顺序
当前代码中SparkContext.setSystemProperty("hive.metastore.uris", "thrift://cmra:9083")在SparkSession创建后设置,可能导致Hive元存储配置未正确加载,建议移到构建阶段:import pyspark import numpy as np import os from pyspark import SparkContext from pyspark.sql import SparkSession, HiveContext print(str(os.environ['PATH'])) print('java') print(str(os.environ['JAVA_HOME'])) spark = SparkSession\ .builder \ .appName("PySpark-SQL-Hive-Cron-Month-overview-entry") \ .config("spark.sql.warehouse.dir", "/user/hive/warehouse")\ .config("spark.master", "yarn") \ .config("spark.cores.max", "2") \ .config("spark.executor.memory", "1g")\ .config("hive.metastore.uris", "thrift://cmra:9083")\ .enableHiveSupport() \ .getOrCreate() sc = spark.sparkContext验证YARN服务状态
- 执行
yarn node -list确认YARN的NodeManager是否正常运行 - 执行
jps查看YARN的ResourceManager、NodeManager进程是否存在 - 若服务未启动,执行Hadoop安装目录sbin下的
start-yarn.sh启动YARN服务
- 执行
清理YARN缓存
- 删除报错中提及的临时目录:
rm -rf /tmp/hadoop-mrl/nm-local-dir/usercache/mrl/appcache/application_1677651248789_0002/ - 或执行
yarn application -kill application_1677651248789_0002终止失败应用,避免残留缓存影响后续启动
- 删除报错中提及的临时目录:
内容的提问来源于stack exchange,提问作者Sajanraj
相关产品推荐
相关产品推荐

