GCP上Airflow 1通过工具函数创建DAG不显示的原因排查
Airflow 1.x(GCP环境)中自定义get_dag函数生成的DAG不显示的原因
Airflow 1.x的DAG发现机制限制
Airflow 1.x会扫描DAG文件里全局作用域的DAG实例,如果get_dag返回的DAG实例没被赋值到全局变量,或者with块结束后实例被回收,调度器就检测不到它。常规创建方式一般是直接把DAG实例绑定到全局变量(比如my_dag = DAG(...)),所以能被正常识别。with语句的作用域问题
用with util.get_dag(...) as my_dag时,DAG实例仅在with块内部有效,块结束后如果没把实例存到全局作用域,Airflow扫描时拿不到这个实例的引用。而常规写法是把DAG实例放在全局作用域,生命周期覆盖整个文件扫描过程。get_dag函数的实现缺陷
检查get_dag函数是否正确返回了DAG实例,上下文管理器的__enter__方法是否确实返回有效DAG对象。如果函数内部没正确初始化DAG必填参数(比如schedule_interval、start_date),或者__exit__方法里意外销毁了DAG实例,都会导致Airflow无法识别。GCP Composer的扫描规则限制
GCP上的Airflow(Composer)对DAG文件扫描有严格规则:文件必须直接在dags/目录或浅层级子目录里,且不能有语法错误。如果util模块不在DAG扫描路径内,或者函数调用过程中有未捕获的异常,会导致DAG实例无法正常生成。
内容的提问来源于stack exchange,提问作者Marco Sulla
相关产品推荐
相关产品推荐

