Airflow初始化SensorOperator时的工作目录及文件读取报错问题
Airflow 相关问题解答
问题1:Airflow在初始化SensorOperator时处于哪个目录?
Airflow初始化SensorOperator(以及所有Operator)时,运行目录是调度器(Scheduler)所在容器的工作目录。默认Docker Airflow镜像的工作目录为/opt/airflow。
注意:Operator的初始化逻辑是在Scheduler进程中执行的,而非Worker进程。
问题2:自定义GithubStarsSensor类(继承BaseSensorOperator)在__init__方法中调用read_stars_from_file读取stars.json时触发FileNotFoundError
问题原因
Operator的__init__方法在Scheduler容器内执行,而你提到的stars.json存储在Worker的用户目录中,两个容器的文件系统相互隔离,Scheduler无法访问Worker容器内的文件路径,因此触发文件找不到的错误。
解决方案
- 调整代码逻辑:将文件读取操作从
__init__方法移到Sensor的poke方法中。poke方法是在Worker进程中执行的,此时可以正常访问Worker容器内的文件路径。 - 共享文件路径:使用Docker卷(volume)将存储
stars.json的目录同时挂载到Scheduler容器和Worker容器的相同路径下,让两个容器都能访问该文件。 - 替换本地文件方案:改用Airflow XCom或外部数据库传递数据,彻底避免跨容器的文件访问问题。
内容的提问来源于stack exchange,提问作者Alexander Lopatin
相关产品推荐
相关产品推荐

