Airflow1.10.11 之添加第一个 dag

1, 任务设计

一期汇聚
一期入库
Oracle汇聚
二期汇聚
二期入库

说明:

  1. 一、二期都有同样的处理,包括汇聚、入库。
  2. 二期汇聚,依赖一期的汇聚结果。
  3. 一、二期都入完Oracle后,再启动Oracle侧的汇聚。

2, 配置 dag


# 隐藏 airflow 自带的 dag 样例
[root@do-airflow ~]# systemctl stop airflow-webserver
[root@do-airflow ~]# systemctl stop airflow-scheduler
[root@do-airflow ~]# vi /opt/airflow/airflow.cfg
load_examples = False

## 可以重启 airflow 服务的话,那就按下方操作
### 如果 airflow 从未初始化过,那就执行 initdb 使其生效
[root@do-airflow ~]# airflow initdb
### 否则,执行 resetdb 使其生效
[root@do-airflow ~]# airflow resetdb -y
[root@do-airflow ~]# systemctl start airflow-webserver
[root@do-airflow ~]# systemctl start airflow-scheduler

## 不可以重启 airflow 服务的话,那就按下方操作
### 指定 dag_id,逐个删除 dag 
[root@do-airflow ~]# airflow delete_dag example_dag_to_delete


# 编写一段用来测试的 shell 脚本,接收两个参数
# 第一个是任务类型,即一期(a),二期(b)
# 第二个是任务的进度,即汇聚(1),入库(2)
[root@do-airflow ~]# vi /root/test.script.sh
#!/bin/bash

S_FILE=""

case $2 in 
"1")
	S_FILE="/root/$1.1.log"
	;;
"2")
	S_FILE="/root/$1.2.log"
	;;
"3")
	S_FILE="/root/$1.3.log"
	;;
*)
	S_FILE=""
	;;
esac

if [[ $S_FILE == "" ]]; then
	exit
fi

rm -f $S_FILE

I=0
while true; do
	S_MSG=`date "+%Y-%m-%d %H:%M:%S"`
	echo $S_MSG
	echo $S_MSG >> $S_FILE
	((I=I+1))
	if [[ $I == 10 ]]; then
		break
	fi
	sleep 1	
	
done

# 给文件可执行的权限
[root@do-airflow ~]# chmod 755 /root/test.script.sh

# 以下编写 dag
[root@do-airflow ~]# vi /root/a_hello.py
import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import timedelta

default_args = {
    'owner': 'dosrain',
    'depends_on_past': False,
    'start_date': airflow.utils.dates.days_ago(2)
}

dag = DAG(
    dag_id='a_hello',
    default_args=default_args,
    description='my first DAG',
    schedule_interval=None)
	
# 一期汇聚	
a1_operator = BashOperator(
    task_id='a1_task',
    bash_command='/root/test.script.sh a 1',
    dag=dag)

# 一期入库
a2_operator = BashOperator(
    task_id='a2_task',
    bash_command='/root/test.script.sh a 2',
    dag=dag)

	
# 二期汇聚	
b1_operator = BashOperator(
    task_id='b1_task',
    bash_command='/root/test.script.sh b 1',
    dag=dag)

# 二期入库
b2_operator = BashOperator(
    task_id='b2_task',
    bash_command='/root/test.script.sh b 2',
    dag=dag)

# Oracle汇聚
c1_operator = BashOperator(
    task_id='c1_task',
    bash_command='/root/test.script.sh c 1',
    dag=dag)

a1_operator>>a2_operator
a1_operator>>b1_operator
b1_operator>>b2_operator
a2_operator>>c1_operator
b2_operator>>c1_operator

# 另外一种写法
# a2_operator.set_upstream(a1_operator)
# b1_operator.set_upstream(a1_operator)
# b2_operator.set_upstream(b1_operator)
# c1_operator.set_upstream(a2_operator)
# c1_operator.set_upstream(b2_operator)

# 以上编写 dag

# 看看有没有语法错误,不报 Exception 就算通过
[root@do-airflow ~]# python3 a_hello.py
[root@do-airflow ~]#

# 复制到 dag 目录下
## 看一下配置文件中的 dags 目录在哪里
[root@do-airflow ~]# cat /opt/airflow/airflow.cfg | grep ^dags_folder
dags_folder = /opt/airflow/dags
## 没有就创建一个
[root@do-airflow ~]# mkdir /opt/airflow/dags
## 把 a_hello.py 移过去
[root@do-airflow ~]# mv /root/a_hello.py /opt/airflow/dags/
## 刷新页面,坐等我们的dag出现在页面上。
http://192.168.109.131:8080/admin

点击 a_hello 那一行,列表右侧的 Graph View 按钮,查看依赖关系,见下图。
在这里插入图片描述

3, 测试及运行 dag

# 看看 airflow 是否可以识别出 dag 中的任务。
[root@do-airflow ~]# airflow list_tasks a_hello
a1_task
a2_task
a3_task
b1_task
b2_task
b3_task

访问 airflow 页面:http://192.168.109.131:8080/admin,找到名为 a_hello 的 dag,点击列表左侧的 toggle 开关,使其呈 on 状态,然后再点击列表右侧的 trigger dag 按钮来触发执行。
在这里插入图片描述

在 Graph View 页面,点击各 task 方块,再点 View Log 按钮,可以查看执行日志。

等待任务全部执行完毕,见下图:
在这里插入图片描述

核查执行结果:

[root@do-airflow ~]# ll --full-time /root/*.log
-rw-r--r--. 1 root root 200 2020-07-20 14:11:18.728971219 +0800 /root/a.1.log
-rw-r--r--. 1 root root 200 2020-07-20 14:12:31.252528742 +0800 /root/a.2.log
-rw-r--r--. 1 root root 200 2020-07-20 14:12:31.257528781 +0800 /root/b.1.log
-rw-r--r--. 1 root root 200 2020-07-20 14:13:45.216097337 +0800 /root/b.2.log
-rw-r--r--. 1 root root 200 2020-07-20 14:14:57.093649893 +0800 /root/c.1.log

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值