Airflow 入门
简介
Airflow是什么
Airflow是airbnb开发的一个任务调度平台,目前已经加入apache基金会
Airflow有什么用
Airflow是一个可编程,调度和监控的工作流平台。基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行。 airflow不仅提供了丰富的命令行工具用于系统管控,还提供了一套web管理界面用于方便地管控调度任务,并且对任务运行状态进行实时监控,方便了系统的运维和管理。
因此,如果有一系列的任务需要调度,同时,各任务之间还有着依赖关系,那么可以考虑使用airflow。
与Airflow同类型的产品
有兴趣的同学可以阅读以下链接Workflow Processing Engine Overview 2018 英文版
2018工作流引擎比较 中文版
Airflow official Tutorial
official tutorial
"""
Code that goes along with the Airflow tutorial located at:
https://github.com/apache/airflow/blob/master/airflow/example_dags/tutorial.py
"""
from airflow import DAG
# 需要使用DAG实例化一个DAG的对象,因此,DAG是必须的
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
"""
default_args是一个词典,之后会将此词典传入DAG的构造函数中.
DAG中的task在构造时将会这些值来初始化。
这种设计是将一些公共的配置提出来,
尤其是一些实例化task必备的参数,例如'owner'等。
更多可用的参数请参考 https://airflow.apache.org/code.html#airflow.models.BaseOperator
""""
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2015, 6, 1),
'email': ['[email protected]'],
'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),
}
"""
实例化一个DAG对象,实例化DAG时必须传入一个独一无二的tag_id,然后将之前定义好的默认参数传入,同时,也传入了schedule_interval
"""
dag = DAG('tutorial', default_args=default_args, schedule_interval=timedelta(days=1))
# t1, t2 and t3 are examples of tasks created by instantiating operators
"""
task 是BashOperator的实例
task_id同来标致task
bash_command 是执行的命令
dag为之前实例化的DAG对象
"""
t1 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag)
t2 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
retries=3, # 可以重写默认的参数
dag=dag)
# Jinja模板
templated_command = """
{% for i in range(5) %}
echo "{
{ ds }}" # 变量
echo "{
{ macros.ds_add(ds, 7)}}" #函数
echo "{
{ params.my_param }}" # 词典
{% endfor %}
"""
t3 = BashOperator(
task_id='templated',
bash_command=templated_command,
params={'my_param': 'Parameter I passed in'},
dag=dag)
t2.set_upstream(t1)
t3.set_upstream(t1)
# 等价于 t1 >> [t2, t3]
复制代码
Airflow 实践
Airflow安装
install
pip install apache-airflow
如果出现安装失败或者初始化db失败,可以看下是否是因为某个包安装失败或者版本不匹配,然后针对性地安装相关包即可