YARN集群模式下SparkSubmitOperator无法访问.env文件的问题
YARN集群模式下访问SparkSubmitOperator传递的.env文件
在YARN集群模式中,通过SparkSubmitOperator的files参数上传的.env文件会被分发到每个节点的本地工作目录,但直接使用文件名访问会因为路径问题导致加载失败,按以下方式处理即可:
首先通过
SparkFiles.get(".env")获取文件在节点本地的绝对路径——你之前看到的HDFS路径只是Spark临时上传的存储位置,任务执行时文件已经被拉取到节点本地拿到路径后,基于该路径加载环境变量,示例代码如下:
from pyspark import SparkFiles from dotenv import load_dotenv import os # 获取.env文件的本地绝对路径 env_file_path = SparkFiles.get(".env") # 基于绝对路径加载环境变量 load_dotenv(env_file_path) # 验证环境变量是否加载成功 print(os.getenv("YOUR_TARGET_ENV_VAR"))额外注意:
- 确保Spark应用依赖的
python-dotenv库已存在:如果使用虚拟环境,需将依赖打包到应用中;或提前在集群所有节点安装该库 - 不要直接调用
load_dotenv(".env"),YARN集群模式下当前工作目录不一定指向文件所在位置,必须通过SparkFiles.get获取准确路径
- 确保Spark应用依赖的
内容的提问来源于stack exchange,提问作者Kenart
相关产品推荐
相关产品推荐

