python airflow_用Python 创建Airflow DAG

用Python 创建Airflow DAG

让我们尝试使用Airflow 运行一个简单的任务。记住:不要把文件命名为airflow.py,否则会和Airflow 项目本身的Python 引入发生混淆!

我们要做的***件事就是初始化Airflow 数据库,如果还没初始化过的话:

airflow initdb

接下来,我们要为我们的DAG 配置脚本airflow_test.py 在Airflow 的DAG 目录~/airflow/dags 中创建软链接。如果不在~/airflow/dags 目录中是没法工作的。如ch02/setup_airflow_test.sh 所示:

#!/usr/bin/env bash

ln -s $PROJECT_HOME/ch02/airflow_setup.py ~/airflow/dags/

我们的配置脚本airflow_test.py 也比较简单。首先我们定义了一个配置项对象,然后用它来创建DAG :

import sys, os, re

from airflow import DAG

from airflow.operators.bash_operator import BashOperator

from datetime import datetime, timedelta

import iso8601

project_home=os.environ["PROJECT_HOME"]

default_args= {

'owner': 'airflow',

'depends_on_past': False,

'start_date': iso8601.parse_date("2016-12-01"),

'email': ['russell.jurney@gmail.com'],

'email_on_failure': True,

'email_on_retry': True,

'retries': 3,

'retry_delay': timedelta(minutes=5),

}

# timedelta 1 表示每天执行

dag=DAG(

'agile_data_science_airflow_test',

default_argsdefault_args=default_args,

schedule_interval=timedelta(1)

)

接下来,为数据流中的每个脚本创建一个BashOperator(https://airflow.incubator.apache.org/code.html#airflow.operators.BashOperator)。定义从bash 运行我们脚本的命令,以及所用的一些参数和路径,然后使用内建参数和刚才定义的参数把命令补充完整。ds 变量是一个内建变量,包含Airflow 运行该命令的日期。我们还提供了脚本要用的文件名filename以及基本路径base_path :

# 运行一个简单的PySpark 脚本

pyspark_local_task_one=BashOperator(

task_id="pyspark_local_task_one",

bash_command="""spark-submit \

--master {{ params.master }}

{{ params.base_path }}/{{ params.filename }} {{ ds }} {{ params.base_path }}

""",

params= {

"master": "local[8]",

"filename": "ch02/pyspark_task_one.py",

"base_path": "{}/".format(project_home)

},

dagdag=dag

)

# 运行另一个简单的PySpark 脚本,依赖前一个脚本

pyspark_local_task_two=BashOperator(

task_id="pyspark_local_task_two",

bash_command="""spark-submit \

--master {{ params.master }}

{{ params.base_path }}/{{ params.filename }} {{ ds }} {{ params.base_path }}

""",

params= {

"master": "local[8]",

"filename": "ch02/pyspark_task_two.py",

"base_path": "{}/".format(project_home)

},

dagdag=dag

)

***,设置***个脚本和第二个脚本之间的依赖关系:

# 添加从第二个任务到***个任务的依赖关系

pyspark_local_task_two.set_upstream(pyspark_local_task_one)

现在,我们只要运行在~/airflow/dags 中创建了软链接的脚本,它就会出现在Airflow 系统中了。注意:脚本必须要在~/airflow/dags 中创建文件链接或者复制进去,否则运行它不会有任何作用。还要注意:此处和后面的输出中的时间和日期因为受限于页面宽度而被删掉了:

$ python ~/airflow/dags/airflow_test.py

[... 15:04:37,875] {__init__.py:36} INFO - Using executor SequentialExecutor

就是这样!该脚本已经在Airflow 中创建了一个可以执行、调度、回填的DAG。让我们看看我们在本例刚刚创建的DAG 中使用的两个脚本的完整内容。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码

51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值