EC2上Airflow守护进程模式运行时出现导入错误求助
Airflow守护进程模式运行时无法读取YAML配置文件的问题
在EC2实例上运行Airflow时,前台启动webserver和scheduler可正常读取自定义YAML配置文件,但通过-D参数以守护进程模式运行时,出现文件读取/导入错误。ETL任务需读取_credentials/global_config.yml获取API密钥,前台运行无问题,守护进程模式下报错。
相关代码片段(etl.py)
import yaml with open("_credentials/global_config.yml", "r") as filename: global_config = yaml.load(filename, Loader=yaml.FullLoader) def extract_data(): # YAML contains API credentials under 'api_key' api_key = global_config.get('api_key') # Further using api_key to call API def transform_data(raw_data): pass def load_data(transformed_data): pass
目录结构
airflow_pipelines |-- airflow/ |-- _credentials/ global_config.yml |-- tasks/ |-- etl.py |-- dags/ |-- group_of_dags_1/ |-- group_of_dags_2/
解决方案
1. 使用绝对路径读取配置文件
守护进程启动时的工作目录(CWD)通常与前台运行时不同,相对路径会失效。通过__file__动态生成配置文件的绝对路径:
import yaml import os # 获取当前脚本所在目录的上级目录(即airflow/根目录) base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) config_path = os.path.join(base_dir, "_credentials", "global_config.yml") with open(config_path, "r") as filename: global_config = yaml.load(filename, Loader=yaml.FullLoader)
2. 切换工作目录后启动守护进程
在启动Airflow守护进程前,先切换到airflow/目录,确保相对路径有效:
cd /path/to/airflow_pipelines/airflow && airflow webserver -D cd /path/to/airflow_pipelines/airflow && airflow scheduler -D
3. 验证配置文件权限
确保守护进程运行用户拥有global_config.yml的读取权限:
# 检查文件权限 ls -l airflow/_credentials/global_config.yml # 赋予其他用户读取权限(按需调整) chmod o+r airflow/_credentials/global_config.yml # 或调整文件所属组为进程运行用户组 chgrp [airflow_user_group] airflow/_credentials/global_config.yml
4. 配置Airflow的HOME路径
在airflow.cfg中指定airflow_home为airflow_pipelines/airflow/,统一所有组件的基准路径:
[core] airflow_home = /path/to/airflow_pipelines/airflow
修改后重启Airflow守护进程。
内容的提问来源于stack exchange,提问作者Jay Pathar
相关产品推荐
相关产品推荐

