大数据调度平台 Airflow(五):Airflow 使用

【Airflow】光速入门指南 Airflow中最为关键的概念就是DAG,中文名称是有向无环图(Directed Acyclic Graph)一个DAG代表着一个较为完整的流程,其中的组成部分是执行不同步骤的Task。如果说DAG是一条珍珠项链,那么TASK就是其中的珍珠。珍珠项链可以有不同的形态、数量和组合方式,DAG和TASK也是同理。#方式一:类的实例化test_task = PythonOperator( #以PythonOperator为例,也可以定义使用其他的Operator。 阅读详情

Airflow 使用

上文说到使用 Airflow 进行任务调度大体步骤如下:

  • 创建 python 文件,根据实际需要,使用不同的 Operator

  • 在 python 文件不同的 Operator 中传入具体参数,定义一系列 task

  • 在 python 文件中定义 Task 之间的关系,形成 DAG

  • 将 python 文件上传执行,调度 DAG,每个 task 会形成一个 Instance

  • 使用命令行或者 WEBUI 进行查看和管理

以上 python 文件就是 Airflow python 脚本,使用代码方式指定 DAG 的结构

一、Airflow 调度 Shell 命令

下面我们以调度执行 shell 命令为例,来讲解 Airflow 使用。

1.首先我们需要创建一个 python 文件,导入需要的类库

# 导入 DAG 对象,后面需要实例化DAG对象from airflow import DAG
# 导入BashOperator Operators,我们需要利用这个对象去执行流程from airflow.operators.bash import BashOperator

复制代码

注意:以上代码可以在开发工具中创建,但是需要在使用的 python3.7 环境中导入安装 Airflow 包。

D:\ProgramData\Anaconda3\envs\python37\Scripts>pip install apache-airflow==2.1.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

复制代码

2.实例化 DAG

from datetime import datetime, timedelta
# default_args中定义一些参数,在实例化DAG时可以使用,使用python dic 格式定义default_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2022, 3, 25),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'myairflow_execute_bash', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(days=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)

复制代码

注意:

  • 实例化 DAG 有三种方式

第一种方式:

with DAG("my_dag_name") as dag:    op=XXOperator(task_id="task")

复制代码

第二种方式(以上采用这种方式):

my_dag = DAG("my_dag_name")op = XXOperator(task_id="task", dag=my_dag)

复制代码

第三种方式:

@dag(start_date=days_ago(2))def generate_dag():    op = XXOperator(task_id="task")dag = generate_dag()

复制代码

  • baseoperator 基础参数说明:

可以参照:

http://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/models/baseoperator/index.html#module-airflow.models.baseoperator查看baseopartor中更多参数。

  • DAG 参数说明

可以参照:

http://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/models/dag/index.html

查看 DAG 参数说明,也可以直接在开发工具点击 DAG 进入源码看下对应参数有哪些。

3、定义 Task

当实例化 Operator 时会生成 Task 任务,从一个 Operator 中实例化出来对象的过程被称为一个构造方法,每个构造方法中都有“task_id”充当任务的唯一标识符。

下面我们定义三个 Operator,也就是三个 Task,每个 task_id 不能重复。

# operator 支持多种类型, 这里使用 BashOperatorfirst = BashOperator(    task_id='first',    bash_command='echo "run first task"',    dag=dag)
middle = BashOperator(    task_id='middle',    bash_command='echo "run middle task"',    dag=dag)
last = BashOperator(    task_id='last',    bash_command='echo "run last task"',    dag=dag,    retries=3)

复制代码

注意:

4、设置 task 依赖关系

#使用 set_upstream、set_downstream 设置依赖关系,不能出现环形链路,否则报错# middle.set_upstream(first) # middle会在first执行完成之后执行# last.set_upstream(middle) # last 会在 middle执行完成之后执行
#也可以使用位移符来设置依赖关系first >> middle >>last # first 首先执行,middle次之,last最后# first >> [middle,last] # first首先执行,middle ,last并行执行

复制代码

注意:当执行脚本时,如果在 DAG 中找到一条环形链路(例如:A->B->C-A)会引发异常。更多 DAG task 依赖关系可参照官网:http://airflow.apache.org/docs/apache-airflow/stable/concepts/dags.html#task-dependencies 

5、上传 python 配置脚本

到目前为止,python 配置如下:

# 导入 DAG 对象,后面需要实例化DAG对象from airflow import DAG
# 导入BashOperator Operators,我们需要利用这个对象去执行流程from airflow.example_dags.example_bash_operator import dag
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta
# default_args中定义一些参数,在实例化DAG时可以使用,使用python dic 格式定义default_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 4),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'myairflow_execute_bash', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(days=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)
# operator 支持多种类型, 这里使用 BashOperatorfirst = BashOperator(    task_id='first',    bash_command='echo "run first task"',    dag=dag)
middle = BashOperator(    task_id='middle',    bash_command='echo "run middle task"',    dag=dag)
last = BashOperator(    task_id='last',    bash_command='echo "run last task"',    dag=dag,    retries=3)
#使用 set_upstream、set_downstream 设置依赖关系,不能出现环形链路,否则报错# middle.set_upstream(first) # middle会在first执行完成之后执行# last.set_upstream(middle) # last 会在 middle执行完成之后执行
#也可以使用位移符来设置依赖关系first >> middle >>last # first 首先执行,middle次之,last最后# first >> [middle,last] # first首先执行,middle ,last并行执行

复制代码

将以上 python 配置文件上传到 AIRFLOWHOME/dags 目录下,默认 AIRFLOW_HOME 为安装节点的“/root/airflow”目录,当前目录下的 dags 目录需要手动创建。

6、重启 Airflow

“ps aux|grep webserver”和“ps aux|grep scheduler”找到对应的 airflow 进程杀掉,重新启动 Airflow。重启之后,可以在 airflow webui 看到对应的 DAG ID ”myairflow_execute_bash”。

7、执行 airflow

按照如下步骤执行 DAG,首先打开工作流,然后“Trigger DAG”执行,随后可以看到任务执行成功。

查看 task 执行日志:

二、DAG 调度触发时间

在 Airflow 中,调度程序会根据 DAG 文件中指定的“start_date”和“schedule_interval”来运行 DAG。特别需要注意的是 Airflow 计划程序在计划时间段的末尾触发执行 DAG,而不是在开始时刻触发 DAG,例如:

default_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2022, 3, 25),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'myairflow_execute_bash', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(days=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)

复制代码

以上配置的 DAG 是从世界标准时间 2022 年 3 月 24 号开始调度,每隔 1 天执行一次,这个 DAG 的具体运行时间如下图:

以上表格中以第一条数据为例解释,Airflow 正常调度是每天 00:00:00 ,假设当天日期为 2022-03-24,正常我们认为只要时间到了 2022-03-24 00:00:00 就会执行,改调度时间所处于的调度周期为 2022-03-24 00:00:00 ~ 2022-03-25 00:00:00 ,在 Airflow 中实际上是在调度周期末端触发执行,也就是说 2022-03-24 00:00:00 自动触发执行时刻为 2022-03-25 00:00:00。

如下图,在 airflow 中,“execution_date”不是实际运行时间,而是其计划周期的开始时间戳。例如:execution_date 是 2021-09-04 00:00:00 的 DAG 自动调度运行的实际时间为 2021-09-05 00:00:00。当然除了自动调度外,我们还可以手动触发执行 DAG 执行,要判断 DAG 运行时计划调度(自动调度)还是手动触发,可以查看“Run Type”。

三、DAG catchup 参数设置

在 Airflow 的工作计划中,一个重要的概念就是 catchup(追赶),在实现 DAG 具体逻辑后,如果将 catchup 设置为 True(默认就为 True),Airflow 将“回填”所有过去的 DAG run,如果将 catchup 设置为 False,Airflow 将从最新的 DAG run 时刻前一时刻开始执行 DAG run,忽略之前所有的记录。

例如:现在某个 DAG 每隔 1 分钟执行一次,调度开始时间为 2001-01-01 ,当前日期为 2021-10-01 15:23:21,如果 catchup 设置为 True,那么 DAG 将从 2001-01-01 00:00:00 开始每分钟都会运行当前 DAG。如果 catchup 设置为 False,那么 DAG 将从 2021-10-01 15:22:20(当前 2021-10-01 15:23:21 前一时刻)开始执行 DAG run。

举例:有 first ,second,third 三个 shell 命令任务,按照顺序调度,每隔 1 分钟执行一次,首次执行时间为 2000-01-01。

设置 catchup 为 True(默认),DAG python 配置如下:

from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta
default_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2001, 1, 1),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}dag = DAG(    dag_id = 'catchup_test1 ', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(minutes=1), # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒    catchup=True # 执行DAG时,将开始时间到目前所有该执行的任务都执行,默认为True)
first = BashOperator(    task_id='first',    bash_command='echo "run first task"',    dag=dag)middle = BashOperator(    task_id='second',    bash_command='echo "run second task"',    dag=dag)last = BashOperator(    task_id='third',    bash_command='echo "run third task"',    dag=dag,    retries=3)first >> middle >>last

复制代码

上传 python 配置文件到 $AIRFLOW_HOME/dags 下,重启 airflow,DAG 执行调度如下:

设置 catchup 为 False,DAG python 配置如下:

from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta
default_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2001, 1, 1),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}dag = DAG(    dag_id = 'catchup_test2', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(minutes=1), # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒    catchup=False # 执行DAG时,将开始时间到目前所有该执行的任务都执行,默认为True)
first = BashOperator(    task_id='first',    bash_command='echo "run first task"',    dag=dag)middle = BashOperator(    task_id='second',    bash_command='echo "run second task"',    dag=dag)last = BashOperator(    task_id='third',    bash_command='echo "run third task"',    dag=dag,    retries=3)first >> middle >>last

复制代码

上传 python 配置文件到 $AIRFLOW_HOME/dags 下,重启 airflow,DAG 执行调度如下:

有两种方式在 Airflow 中配置 catchup:

  • 全局配置

在 airflow 配置文件 airflow.cfg 的 scheduler 部分下,设置 catchup_by_default=True(默认)或 False,这个设置是全局性的设置。

  • DAG 文件配置

在 python 代码配置中设置 DAG 对象的参数:dag.catchup=True 或 False。

dag = DAG(    dag_id = 'myairflow_execute_bash',default_args = default_args,    catchup=False,    schedule_interval = timedelta(days=1))

复制代码

四、DAG 调度周期设置

每个 DAG 可以有或者没有调度执行周期,如果有调度周期,我们可以在 python 代码 DAG 配置中设置“schedule_interval”参数来指定调度 DAG 周期,可以通过以下三种方式来设置。

  • 预置的 Cron 调度

Airflow 预置了一些 Cron 调度周期,可以参照:

DAG Runs — Airflow Documentation,如下图:

在 python 配置文件中使用如下:

default_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 4),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'cron_test', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = '@daily' # 使用预置的Cron调度,每天0点0分调度

复制代码

  • Cron

这种方式就是写 Linux 系统的 crontab 定时任务命令,可以在https://crontab.guru/网站先生成对应的定时调度命令,其格式如下:

minute  hour  day  month  weekminute:表示分钟,可以从0~59之间的任意整数。hour:表示小时,可以是从0到23之间的任意整数。day:表示日期,可以是1到31之间的任何整数。month:表示月份,可以是从1到12之间的任何整数。week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

复制代码

以上各个字段中还可以使用特殊符号代表不同意思:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。逗号(,):可以用逗号隔开的值指定一个列表范围,例如,”1,2,5,7,8,9”中杠(-):可以用整数之间的中杠表示一个整数范围,例如”2-6”表示”2,3,4,5,6”正斜线(/):可以用正斜线指定时间的间隔频率,步长,例如”0-23/2”表示每两小时执行一次。

复制代码

在 python 配置文件中使用如下:

default_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 4),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'cron_test', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = '* * * * *' # 使用Crontab 定时任务命令,每分钟运行一次)

复制代码

  • datetime.timedelta

timedelta 是使用 python timedelta 设置调度周期,可以配置天、周、小时、分钟、秒、毫秒。在 python 配置文件中使用如下:

default_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 4),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'cron_test', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(minutes=5) # 使用python timedelta 设置调度周期,可以配置天、周、小时、分钟、秒、毫秒)

复制代码

五、DAG 任务依赖设置

1、DAG 任务依赖设置一

  • DAG 调度流程图

  • task 执行依赖

A >> B >>C

复制代码

  • 完整代码

'''airflow 任务依赖关系设置一
'''from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedeltadefault_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 22),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'dag_relation_1', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(minutes=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)

A = BashOperator(    task_id='A',    bash_command='echo "run A task"',    dag=dag)
B = BashOperator(    task_id='B',    bash_command='echo "run B task"',    dag=dag)
C = BashOperator(    task_id='C',    bash_command='echo "run C task"',    dag=dag,    retries=3)
A >> B >>C

复制代码

2、DAG 任务依赖设置二

  • DAG 调度流程图

  • task 执行依赖

[A,B] >>C >>D

复制代码

  • 完整代码

'''airflow 任务依赖关系设置二
'''from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedeltadefault_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 22),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'dag_relation_2', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(minutes=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)

A = BashOperator(    task_id='A',    bash_command='echo "run A task"',    dag=dag)
B = BashOperator(    task_id='B',    bash_command='echo "run B task"',    dag=dag)
C = BashOperator(    task_id='C',    bash_command='echo "run C task"',    dag=dag,    retries=3)
D = BashOperator(    task_id='D',    bash_command='echo "run D task"',    dag=dag)
[A,B] >>C >>D

复制代码

3、DAG 任务依赖设置三

  • DAG 调度流程图

  • task 执行依赖

[A,B,C] >>D >>[E,F]
  • 完整代码

'''airflow 任务依赖关系设置三
'''from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedeltadefault_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 22),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'dag_relation_3', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(minutes=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)

A = BashOperator(    task_id='A',    bash_command='echo "run A task"',    dag=dag)
B = BashOperator(    task_id='B',    bash_command='echo "run B task"',    dag=dag)
C = BashOperator(    task_id='C',    bash_command='echo "run C task"',    dag=dag,    retries=3)
D = BashOperator(    task_id='D',    bash_command='echo "run D task"',    dag=dag)
E = BashOperator(    task_id='E',    bash_command='echo "run E task"',    dag=dag)
F = BashOperator(    task_id='F',    bash_command='echo "run F task"',    dag=dag)
[A,B,C] >>D >>[E,F]

4、DAG 任务依赖设置四

  • DAG 调度流程图

  • task 执行依赖

A >>B>>C>>DA >>E>>

  • 完整代码

'''airflow 任务依赖关系设置四
'''from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedeltadefault_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 22),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'dag_relation_4', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(minutes=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)

A = BashOperator(    task_id='A',    bash_command='echo "run A task"',    dag=dag)
B = BashOperator(    task_id='B',    bash_command='echo "run B task"',    dag=dag)
C = BashOperator(    task_id='C',    bash_command='echo "run C task"',    dag=dag,    retries=3)
D = BashOperator(    task_id='D',    bash_command='echo "run D task"',    dag=dag)
E = BashOperator(    task_id='E',    bash_command='echo "run E task"',    dag=dag)
F = BashOperator(    task_id='F',    bash_command='echo "run F task"',    dag=dag)
A >>[B,C,D]A >>[E,F]

5、DAG 任务依赖设置五

  • DAG 调度流程图

  • task 执行依赖

A >>B>>EC >>D>>E
  • 完整代码

'''airflow 任务依赖关系设置五
'''from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedeltadefault_args = {    'owner': 'airflow', # 拥有者名称    'start_date': datetime(2021, 9, 22),  # 第一次开始执行的时间,为 UTC 时间    'retries': 1,  # 失败重试次数    'retry_delay': timedelta(minutes=5),  # 失败重试间隔}
dag = DAG(    dag_id = 'dag_relation_5', #DAG id ,必须完全由字母、数字、下划线组成    default_args = default_args, #外部定义的 dic 格式的参数    schedule_interval = timedelta(minutes=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)

A = BashOperator(    task_id='A',    bash_command='echo "run A task"',    dag=dag)
B = BashOperator(    task_id='B',    bash_command='echo "run B task"',    dag=dag)
C = BashOperator(    task_id='C',    bash_command='echo "run C task"',    dag=dag,    retries=3)
D = BashOperator(    task_id='D',    bash_command='echo "run D task"',    dag=dag)
E = BashOperator(    task_id='E',    bash_command='echo "run E task"',    dag=dag)
A >>B>>EC >>D>>E 

Airflow:工作流调度的原理与使用指南 Airflow 使用 Python 的 DAGs(Directed Acyclic Graphs,有向无环图)来定义工作流。DAGs 是一系列相互依赖的任务(tasks),它们按照特定的顺序执行。每个任务都可以是任何你想要执行的代码,例如 SQL 查询、Python 函数调用或 API 调用等。 阅读详情

相关推荐

【大数据】【调度】Airflow 和 Azkaban的选型

Airflow和Azkaban这两个组件对大数据集群来说是相对独立的,都是可以独立于集群安装,所以不管是cdh还是hdp集群,都可以选择其中之一作为集群的任务调度系统。 我们公司有2套集群,国内国外各一套,然后因为历史原因国内用的是Azkaban,国外用的是Airflow,考虑到以后技术栈的统一,打算慢慢将两个集群的组件统一化,所以就有了调研两个调度系统对比这件事。 这里就将这两个组件拿出来对比一下,这里没有拿oozie出来说是因为用我用oozie的不多,并且oozie是强依赖于hadoop的,不适合作为.

梦,不可及,所以可期待... 3625

全流程调度-Airflow介绍和使用

Airflow是一个以编程方式编写,安排和监视工作流的平台。使用Airflow将工作流编写任务的有向无环图(DAG)。Airflow计划程序在遵循指定的依赖项,同时在一组工作线程上执行任务。丰富的命令实用程序使在DAG上执行复杂的调度变的轻而易举。丰富的用户界面使查看生产中正在运行的管道,监视进度以及需要时对问题进行故障排除变的容易。

迷雾总会解 1万+

大数据调度平台 Airflow(二):Airflow 架构及原理

Airflow 我们可以构建 Workflow 工作流,工作流使用 DAG 有向无环图来表示,DAG 指定了任务之间的关系,如下图:Airflow 架构图如下:Airflow 在运行时有很多守护进程,这些进程提供了 airflow 全部功能,守护进程包括如下:webserver:WebServer 服务器可以接收 HTTP 请求,用于提供用户界面的操作窗口,主要负责中止、恢复、触发任务;监控任务;断点续跑任务;查询任务状态、详细日志等。

wr_java的博客 2141

Airflow: 大数据调度工具详解

Apache Airflow是一款开源的工作流调度平台,广泛应用于ETL流程、数据处理、定时任务和机器学习工作流等场景。其通过Python脚本定义DAG,实现任务的编排和调度,提供友好的Web UI进行监控和管理。Airflow具备灵活性高、扩展性好、可视化界面等优点,但也存在配置复杂、性能开销等挑战。通过合理的部署和优化,Airflow可以显著提升数据处理和调度的效率,成为数据工程师和数据科学家不可或缺的工具。

在路上的专栏 2320

大数据任务调度:DolphinScheduler、Airflow 实战(调度策略、任务依赖)

DolphinScheduler 适合大数据 ETL、数仓建设,提供可视化管理。Airflow 适合灵活的数据工程和 ML 任务,扩展性更强。最佳实践建议:大数据任务(Spark、Hive、Flink)→ 推荐 DolphinScheduler复杂 Python 任务(机器学习、API 任务)→ 推荐 Airflow混合使用:可以结合两者,DolphinScheduler 调度 Airflow 任务,提高灵活性。选择合适的工具,能够大幅提升数据处理的自动化程度和稳定性!

晴天彩虹雨的博客 1818

Apache Airflow (六) :DAG catchup 参数设置

如果catchup 设置为False,那么DAG将从2021-10-01 15:22:20(当前2021-10-01 15:23:21前一时刻)开始执行DAG run。在Airflow的工作计划中,一个重要的概念就是catchup(追赶),在实现DAG具体逻辑后,如果将catchup设置为True(默认就为True),Airflow将“回填”所有过去的DAG run,如果将catchup设置为False,Airflow将从最新的DAG run时刻前一时刻开始执行 DAG run,忽略之前所有的记录。

qq_32020645的博客 1256

大数据调度平台Airflow(六):Airflow Operators及案例

定义依赖的触发规则,包括选项如下{all_success|all_failed|all_done|one_success|one_failed|none_failed|none_failed_or_skipped|none_skipped|dummy(无条件执行)}defaultisall_success。在“bash_command”中写执行脚本时,一定要在脚本后跟上空格,有没有参数都要跟上空格,否则会找不到对应的脚本。...

lisheng19870305的专栏 4612

大数据调度平台Airflow(五):Airflow使用

目录 Airflow使用 一、Airflow调度Shell命令 1.首先我们需要创建一个python文件,导入需要的类库 2.实例化DAG 3、定义Task 4、设置task依赖关系 5、上传python配置脚本 6、重启Airflow 7、执行airflow 二、DAG调度触发时间 三、DAG catchup 参数设置 四、DAG调度周期设置 五、DAG任务依赖设置 1、​​​​​​​DAG任务依赖设置一 2、​​​​​​​DAG任务依赖设置二 3、​​​​​​​DAG任务

Lansonli(蓝深李)的博客 4114

大数据组件(一)快速入门调度组件Airflow

大数据组件(一)快速入门调度组件Airflow:案例详解

qq_44665283的博客 2171

大数据调度平台Airflow(八):Airflow分布式集群搭建及测试

目录 Airflow分布式集群搭建及测试 一、节点规划 二、airflow集群搭建步骤 1、在所有节点安装python3.7 2、在所有节点上安装airflow 三、初始化Airflow 1、每台节点安装需要的python依赖包 2、在node1上初始化Airflow 数据库 四、​​​​​​​创建管理员用户信息 五、​​​​​​​配置Scheduler HA 1、下载failover组件 2、使用pip进行安装failover需要的依赖包 3、node1节点初始化failover

Lansonli(蓝深李)的博客 1万+

大数据调度平台Airflow(一):什么是Airflow

什么是Airflow Apache Airflow是一个提供基于DAG有向无环图来编排工作流的、可视化的分布式任务调度平台,与Oozie、Azkaban等任务流调度平台类似。Airflow在2014年由Airbnb发起,2016年3月进入Apache基金会,在2019年1月成为顶级项目。Airflow采用Python语言编写,提供可编程方式定义DAG工作流,可以定义一组有依赖的任务,按照依赖依次执行, 实现任务管理、调度、监控功能。 另外,Airflow提供了WebUI可视化界面,提供了工作流节点的运行

Lansonli(蓝深李)的博客 4241

任务流调度工具AirFlow

目标了解AirFlow的功能特点及应用场景路径step1:背景step2:设计step3:功能step4:特点step5:应用实施起源2014年,Airbnb创造了一套工作流调度系统:Airflow,用来替他们完成业务中复杂的ETL处理。从清洗,到拼接,只用设置好一套Airflow的流程图。2016年开源到了Apache基金会。2019年成为了Apache基金会的顶级项目:http://airflow.apache.org/。设计。

黑马程序员官方博客 3948

大数据调度平台Airflow(二):Airflow架构及原理

目录 Airflow架构及原理 一、Airflow架构 二、Airflow术语 三、Airflow工作原理 Airflow架构及原理 一、Airflow架构 Airflow我们可以构建Workflow工作流,工作流使用DAG有向无环图来表示,DAG指定了任务之间的关系,如下图: Airflow架构图如下: Airflow在运行时有很多守护进程,这些进程提供了airflow全部功能,守护进程包括如下: webserver: WebServer服务器可以接收HTTP请求,用于提.

Lansonli(蓝深李)的博客 2856

大数据调度系统AirFlow全知全解+使用案例篇

大数据调度系统,最全讲解篇 AirFlow 概念和使用案例 AirFlow Operator AirFlow Executor AirFlow 新特性 AirFlow教程

Pushkin.的博客 1万+

大数据标准化自动化:基于Airflow的调度方案

新人接手任务时,只要填写模板的参数,就能生成DAG;任务失败时,Airflow会自动重试,重试失败会发送告警;故障排查时,只要看Web界面的DAG图,就能快速找到问题所在。凌晨3点的告警电话再也没响过,小张终于能睡个安稳觉了。而这一切的变化,源于他们从"救火队员"变成了"流程设计者"——用Airflow把"混乱的流程"变成了"标准化的流水线"。大数据的价值不在于"数据多",而在于"数据能高效产生价值"。

AI大模型应用之禅 963

SCDM学习笔记(5)

几何前处理后一般会获得几何的固体区域,然而当进行流体仿真的时候是对流体的区域进行计算的。因此,如何快速地从固体的几何模型获得流体的几何模型是一个重点问题。 流体问题一般可分为内流场与外流场问题,对于内流场问题,SCDM有专门的处理工具 工程图纸大致如下: 要创建这个几何的大致策略是画出截面的圆形,再画出轴线,通过扫掠的方式建立几何。 以上是mixing的国体区域,通过体积抽...

diyhoo的编程小屋 6357
上一篇: 大数据调度平台 Airflow(三):Airflow 单机搭建
下一篇: 数据中台建设(一):数据中台出现的背景
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值