如何运行简单的气流DAG

时间:2017-01-23 11:26:48

标签: python airflow

我对Airflow完全陌生。我想在指定的日期运行一个简单的DAG。我很难在开始日期,执行日期和回填之间做出改变。什么是运行DAG的命令?

以下是我尝试过的事情:

airflow run dag_1 task_1 2017-1-23

我第一次运行该命令时,任务执行正确,但是当我再次尝试时它没有用。

这是我跑的另一个命令:

airflow backfill dag_1 -s 2017-1-23 -e 2017-1-24

我不知道该命令会发生什么。 DAG每天会从23点到24点执行吗?

在运行上面的两个命令之前,我这样做了:

airflow initdb
airflow scheduler 
airflow webserver -p 8085 --debug &

这是我的DAG

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2017, 1, 23, 12),
    'email': ['airflow@airflow.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'dag_1', default_args=default_args, schedule_interval=timedelta(1))

t1 = BashOperator(
    task_id='create_clients',
    bash_command='Rscript /scripts/Cli.r',
    dag=dag)

t2 = BashOperator(
    task_id='create_operation',
    bash_command='Rscript Operation.r',
    retries=3,
    dag=dag)

t2.set_upstream(t1)

截图:Tree View

更新

airflow run dag_1 task_1 2017-1-23T10:34

2 个答案:

答案 0 :(得分:16)

如果使用

运行一次
airflow run --force=true dag_1 task_1 2017-1-23

运行保存并再次运行它不会做任何你可以尝试通过强制重新运行它的事情

airflow clear dag_1 -s 2017-1-23 -e 2017-1-24

airflow backfill命令将运行在从开始日期到结束日期指定的时间段内运行的任何执行。它将取决于您在DAG上设置的计划,如果您将其设置为每小时触发它应运行24次,但它也不会重新执行先前执行的运行。

您可以清除任务,就像它从未运行

一样
<form name="devices" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <select name="device" id="device">

        <option value="i1">i1</option>
        <option value="i2">i2</option>
     </select>

</form>

<?php

$device = "";
if(isset($_POST['device'])) {
$device = $_POST['device'];

}

switch ($device) {

    case 'i1':
    $w = 50;
    break;
    case 'i2':
    $w = 100;

    break;
    default:
    $w = 50;        
        break;
}

?>
<div style="width: <?=$w?>px; height: 100px;background-color: black;"></div>

另请查看此处的cli文档:https://airflow.incubator.apache.org/cli.html

答案 1 :(得分:2)

  

开始日期,执行日期和回填

之间的差异

完成回填以显式运行DAG以测试/手动运行DAG /重新运行错误输出的DAG。您可以使用CLI

执行此操作
airflow backfill -s <<start_date>> <<dag>> 
#optionally provide -1 as start_date to run it immediately
顾名思义,

start_date 是DAG定义有效时的日期

execution_date 是运行它的日期时间。这是您在测试DAG的各个任务时提供的,如下所示

airflow test <<dag>> <<task>> <<exec_date>>
  

运行dag的命令是什么

Backfill 是显式运行DAG的命令。否则,您只需将DAG放在DAGBAG文件夹中,调度程序将按照DAG定义中定义的计划运行它

airflow backfill -s <<start_date>> <<dag>> 
#optionally provide -1 as start_date to run it immediately