AirFlow使用第一个DAG示例

1. 启动Web服务器

使用如下命令启用:

airflow webserver

现在可以通过将浏览器导航到启动Airflow的主机上的8080端口来访问Airflow UI,例如:http://localhost:8080/admin/

备注

Airflow附带了许多示例DAG。 请注意,在你自己的`dags_folder`中至少有一个DAG定义文件之前,这些示例可能无法正常工作。你可以通过更改`airflow.cfg`中的`load_examples`设置来隐藏示例DAG。

2. 第一个AirFlow DAG

现在一切都准备好了,我们开始写一些代码,来实现我们的第一个DAG。 我们将首先创建一个Hello World工作流程,其中除了向日志发送"Hello world!"之外什么都不做。

创建你的dags_folder,那就是你的DAG定义文件存储目录---$AIRFLOW_HOME/dags。在该目录中创建一个名为hello_world.py的文件。

# -*- coding: utf-8 -*-
 
import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
from datetime import timedelta
 
#-------------------------------------------------------------------------------
# these args will get passed on to each operator
# you can override them on a per-task basis during operator initialization
 
default_args = {
    'owner': 'jifeng.si',
    'depends_on_past': False,
    'start_date': airflow.utils.dates.days_ago(2),
    'email': ['1203745031@qq.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    # 'queue': 'bash_queue',
    # 'pool': 'backfill',
    # 'priority_weight': 10,
    # 'end_date': datetime(2016, 1, 1),
    # 'wait_for_downstream': False,
    # 'dag': dag,
    # 'adhoc':False,
    # 'sla': timedelta(hours=2),
    # 'execution_timeout': timedelta(seconds=300),
    # 'on_failure_callback': some_function,
    # 'on_success_callback': some_other_function,
    # 'on_retry_callback': another_function,
    # 'trigger_rule': u'all_success'
}
 
#-------------------------------------------------------------------------------
# dag
 
dag = DAG(
    'example_hello_world_dag',
    default_args=default_args,
    description='my first DAG',
    schedule_interval=timedelta(days=1))
 
#-------------------------------------------------------------------------------
# first operator
 
date_operator = BashOperator(
    task_id='date_task',
    bash_command='date',
    dag=dag)
 
#-------------------------------------------------------------------------------
# second operator
 
sleep_operator = BashOperator(
    task_id='sleep_task',
    depends_on_past=False,
    bash_command='sleep 5',
    dag=dag)
 
#-------------------------------------------------------------------------------
# third operator
 
def print_hello():
    return 'Hello world!'
 
hello_operator = PythonOperator(
    task_id='hello_task',
    python_callable=print_hello,
    dag=dag)
 
#-------------------------------------------------------------------------------
# dependencies
 
sleep_operator.set_upstream(date_operator)
hello_operator.set_upstream(date_operator)
--------------------- 

该文件创建一个简单的DAG,只有三个运算符,两个BaseOperator(一个打印日期一个休眠5秒),另一个为PythonOperator在执行任务时调用print_hello函数。
3. 测试代码

使用如下命令测试一下我们写的代码的正确性:

python ~/opt/airflow/dags/hello_world.py

如果你的脚本没有抛出异常,这意味着你代码中没有错误,并且你的Airflow环境是健全的。

下面测试一下我们的DAG中的Task.使用如下命令查看我们example_hello_world_dagDAG下有什么Task:

调度程序将发送任务进行执行。默认Airflow设置依赖于一个名为`SequentialExecutor`的执行器,它由调度程序自动启动。在生产中,你可以使用更强大的执行器,如`CeleryExecutor`。

 

...
[2017-08-03 09:46:43,213] {base_task_runner.py:95} INFO - Subtask: --------------------------------------------------------------------------------
[2017-08-03 09:46:43,213] {base_task_runner.py:95} INFO - Subtask: Starting attempt 1 of 2
[2017-08-03 09:46:43,214] {base_task_runner.py:95} INFO - Subtask: --------------------------------------------------------------------------------
[2017-08-03 09:46:43,214] {base_task_runner.py:95} INFO - Subtask:
[2017-08-03 09:46:43,228] {base_task_runner.py:95} INFO - Subtask: [2017-08-03 09:46:43,228] {models.py:1342} INFO - Executing <Task(PythonOperator): hello_task> on 2017-08-03 09:45:49.070859
[2017-08-03 09:46:43,236] {base_task_runner.py:95} INFO - Subtask: [2017-08-03 09:46:43,235] {python_operator.py:81} INFO - Done. Returned value was: Hello world!
[2017-08-03 09:46:47,378] {jobs.py:2083} INFO - Task exited with return code 0
--------------------- 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值