Airflow Scheduler没有拿起DA​​G运行

时间:2017-12-15 15:02:42

标签: scheduler distributed airflow apache-airflow airflow-scheduler

我正在设置气流,以便网络服务器在一台计算机上运行,​​而计划程序在另一台计算机上运行。两者共享相同的MySQL Metastore数据库。这两个实例在日志中都没有任何错误,但调度程序没有获取通过Web UI手动触发DAG创建的任何DAG运行。

MysQL中的dag_run表显示的条目很少,都处于运行状态:

$(document).ready(function(){
  // set video srs 
  $('a').click(function(){
    $("video").html('<source src="'+$(this).data('link')+'"></source>' );
  });   
});

但是,在另一台计算机上启动并连接到同一MySQL数据库的调度程序只是对与此数据库通信并实际运行这些DAG运行并将它们转换为任务实例不感兴趣。

不确定我在此处的设置中缺少什么。这么几个问题:

  1. 何时以及如何填充位于$ AIRFLOW_HOME / dags的DAGS文件夹?我认为它是在网络服务器启动的时候。但是如果我只是在另一台机器上启动调度程序,该机器上的DAGS文件夹将如何填满?
  2. 目前,我只在托管网络服务器的机器上进行气流initdb,而不是在调度程序上。希望这是正确的。
  3. 我是否可以为调度程序启用调试日志以获取更多可以指示缺少的日志?从当前日志看,它看起来只是在本地系统的DAGS文件夹中查找,并且在那里找不到DAGS(甚至不是示例),尽管配置加载示例设置为True。

    不要认为这很重要,但我目前正在使用LocalExecutor

    感谢任何帮助。

    编辑:我知道我需要在机器上同步DAGS文件夹,因为气流文档建议但不确定这是否是调度程序在上述情况下没有完成任务的原因。

1 个答案:

答案 0 :(得分:1)

Ok, I got the answer - It looks like the Scheduler does not query the DB until there are any DAGS in the local DAG Folder. The code in job.py looks like

ti_query = (
        session
        .query(TI)
        .filter(TI.dag_id.in_(simple_dag_bag.dag_ids))
        .outerjoin(DR,
            and_(DR.dag_id == TI.dag_id,
                 DR.execution_date == TI.execution_date))
        .filter(or_(DR.run_id == None,
                not_(DR.run_id.like(BackfillJob.ID_PREFIX + '%'))))
        .outerjoin(DM, DM.dag_id==TI.dag_id)
        .filter(or_(DM.dag_id == None,
                not_(DM.is_paused)))
    )

I added a simple DAG in my local DAG folder on the machine hosting Scheduler and it started picking up other DAG instances as well.

We raised an issue for this - https://issues.apache.org/jira/browse/AIRFLOW-1934