标题: Airflow安装详解
日期: 2021-11-16 21:27:21
标签: [airflow]
分类: 调度系统

在讲airflow安装之前,我们先来了解下airflow的架构,这有助于我们去理解安装的步骤到底是干嘛的。

来看这篇文章:airflow架构

AIRFLOW__DATABASE__SQL_ALCHEMY_CONN 配置mysql airflow 安装_架构

我讲的airflow是1.10.14版本的哈。

所以,如果我们搭建airflow是做大量的任务调度,那么就推荐元数据库使用mysql/postgresql,消息队列使用redis/rabbitmq。

我以mysql和rabbitmq为例来讲解安装airflow 1.10.14版本。

1.AIRFLOW_HOME环境变量

这个变量是我们在初始化的时候,airflow它要去哪里生成对应的airflow.cfg和webserver_config.py文件
airflow.cfg配置文件很重要,配置了我们需要用到的所有组件信息,还有airflow自身的一些配置参数。

我们一般在用户根目录下的.bash_profile中添加该环境变量,这样在用户登录shell时,就会有对应的环境变量。

vim ~/.bash_profile

记住,在每台机器上都有执行。

2.安装

pip install apache-airflow==1.10.14

记住,在每台机器上都要执行。

3.生成配置文件

airflow initdb

AIRFLOW__DATABASE__SQL_ALCHEMY_CONN 配置mysql airflow 安装_架构_02

4.修改配置文件

因为前面我们已经设置了AIRFLOW_HOME环境变量,所以airflow.cfg配置文件就生成在变量所指定的位置,我们cd到那里去,然后编辑它:

cd $AIRFLOW_HOME
vim airflow.cfg

然后我们来介绍一下重点的配置参数,重要的我都说一遍:

[core]
**dags_folder**:airflow所扫描的dag目录;

**default_timezone**:这是默认的时区,调度时间按照这个时区来计算,一定要设置`Asia/Shanghai`,不然国内用户会发现调度时间跟北京时间晚了8小时;

executor:有以下几个选择,生产一般使用CeleryExecutor
SequentialExecutor:按顺序调度,这个一般适用于开发、测试,因为按顺序调度,真的是太慢了。
LocalExecutor:local模式,就无法使用集群扩展了。
CeleryExecutor:分布式调度
DaskExecutor:没用过
KubernetesExecutor:kubernetes方式提交任务,也适用于生产,一般是那些单个任务比较大的情况。

----------------------------------------2021-11-18 更新----------------------------------------

sql_alchemy_conn:airflow的元数据库连接串,可以是sqlite、mysql、postgresql,推荐mysql和postgresql:
sql_alchemy_conn = mysql://airflow:airflow@localhost:3306/airflow_11?charset=utf8

----------------------------------------2021-11-19 更新----------------------------------------
parallelism:所有worker同时运行的task数;
dag_concurrency:单个dag中同时运行的task数;

max_active_runs_per_dag:单个dag最多同时运行的dag_run数;

load_examples:是否加载airflow自带的example dag;

fernet_key:connection和variable加密用的key,记住,如果你要升级airflow,升级后需要把此参数值copy到新的配置文件中,不然升级后,airflow中的connection和variable加密的值会解密失败,无法查看;

dagbag_import_timeout:scheduler加载新的dag使用的超时时间;
dag_file_processor_timeout:scheduler解析dag使用的超时时间;

store_serialized_dags:是否序列化dag,开启时,scheduler会定时将dag序列化到数据库中存储起来,这样我们的webserver就直接可以查数据库了,更方便快捷高效;
min_serialized_dag_update_interval:序列化dag的最小间隔时间,也就是说,scheduler序列化所有dag后,隔多长时间再序列化。
store_dag_code:是否存储dag代码到数据库;


[webserver]
base_url:webserver启动的访问url
web_server_host:webserver的host
web_server_port:webserver的访问端口

web_server_master_timeout:webserver其实启动的是gunicorn服务,那么webserver master gunicorn服务超过这个时间没有响应,就会抛出异常;
web_server_worker_timeout:webserver worker服务同理
workers:webserver启动的gunicorn服务个数,个数越多,webserver更快,当然根据系统资源来设置;

expose_config:是否可以在web上查看airflow.cfg;

authenticate:webserver认证方式,我们可以设置以下几个登录认证方式,这几个方式仅限登录认证:
- github_enterprise_auth
- google_auth
- kerberos_auth
- ldap_auth
- password_auth
当然我们后面还有一个rbac认证模式,这是生产用的最多的方式,因为它包含了web界面上每一个点击按钮的权限
filter_by_owner:当我们使用了以上认证方式时,如果filter_by_owner设置为true,那么登录后,界面上显示的dag设置的owner就是跟登录用户一致的。做到了dag的用户隔离;

dag_default_view:在我们从web界面进入某个dag时,默认展示的页面,可以设置tree, graph, duration, gantt, landing_times

hide_paused_dags_by_default:是否隐藏关闭的dag;

page_size:web页面主页默认展示的dag个数,设置越少,打开主页速度越快哦;

rbac:权限认证模式,开启时,可以做到web界面的权限控制,细粒度到每个dag的每个task的每个操作;

default_dag_run_display_number:打开dag的tree界面时,默认显示多少个运行批次:越少越好,打开的速度也就越快;

----------------------------------------2021-11-27 更新----------------------------------------

[sentry]
sentry_dsn: sentry是一个监控系统,可以监控到airflow服务的运行情况

[celery]
worker_concurrency: 单个worker的并发执行task数

broker_url: broker支持rabbitmq/redis/mysql/postgresql, task执行命令的中转站,scheduler发送执行命令到中转站,然后worker去消费这些task命令,并执行

result_backend:worker执行完task,将结果存储的位置,官方推荐使用落地的持久化数据库,如mysql、postgresql等

flower_host:flower是airflow中监控broker和worker的一个服务,有自己的单独页面,可以看到broker情况、task执行情况

flower_port:flower访问的端口


[scheduler]
airflow最重要的角色:调度器,它承担着初始化dag文件、动态编译dag文件、发现调度任务并发送执行命令的责任。我们调度的快慢,也需要从这里设置一些参数,下面来看看。

- job_heartbeat_sec:任务的心跳监控时间,每隔job_heartbeat_sec秒去监控一下任务的状态
- scheduler_heartbeat_sec:监控scheduler的状态,每隔scheduler_heartbeat_sec秒去监控scheduler状态
- run_duration:scheduler运行多长时间停止,-1表示不停止,持续调度
- num_runs:每隔dag的调度次数,-1表示无限次
- processor_poll_interval:解析每个dag之间的间隔时间
- min_file_process_interval:间隔多长时间一个新的dag被拾起;
- dag_dir_list_interval:间隔多长时间,scheduler从磁盘读取出dag列表。跟上一个参数min_file_process_interval的区别就是,此参数不解析dag,只获取dag列表。先获取dag列表,在解析dag文件;
- parsing_processes:编译dag所使用的schedule进程数,这个非常关键,影响到dag的调度速度和task的调度速度,官方推荐cpu盒数-1,但是我们可以设置到2倍的cpu盒数,榨干cpu。

5.启动

airflow scheduler -D
airflow webserver -D
airflow worker -D

记住,上述三条命令,会在执行命令的当前目录生成相应的pid和log文件,下次启动如果还在这个目录下,记住清理掉pid文件,不然会报文件已经存在异常。

好了,就到这里,airflow.cfg配置就介绍到这里,都是平时调整比较多的参数。

下期带你们看跟airflow相关的元数据表。


吾之初心,永世不忘。
要做一个有良心的人。


书山有路勤为径,学海无涯苦作舟。