当第一次运行Airflow时,会在$AIRFLOW_HOME
,创建airflow.cfg
,它用来配置Airflow。
如果要以环境变量配置Airflow,则必须遵循格式
$AIRFLOW__{SECTION}__{KEY}
比如,配置metadata database连接字符串,可以在airflow.cfg中配置
[core]
sql_alchemy_conn = my_conn_string
或者是创建相关的环境变量
AIRFLOW__CORE__SQL_ALCHEMY_CONN=my_conn_string
如果是在运行时使用连接字符串
[core]
sql_alchemy_conn_cmd = bash_command_to_run
但上面这种用法,只有在sql_alchemy_conn
,broker_url
,celery_result_backend
这3个配置项才有效
配置的优先级:
环境变量
airflow.cfg的普通配置
airflow.cfg的command配置
默认配置
Backend
Airflow通过SqlAlchemy库与metadata交互,它可以支持任何MySQL、Postgres等。
如果使用Postgres,推荐使用psycopg2
驱动,因为SqlAlchemy在Postgres的链接字符串中并不执行某个schema,因此可以为Airflow通过命令创建角色及schema
ALTER ROLE username SET search_path=airflow,foobar;
MySQL
MySQL的安装这里不做赘述,这里采用mysql镜像。
$ docker pull mysql
运行mysql容器
docker run --name airflow-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
通过navicat或命令行连接mysql,并创建airflow数据库
在安装airflow的mysql组件时,首先确保mysql-devel已经安装。(需要通过mysql的yum源)
$ yum install mysql-community-devel
安装airflow的mysql组件
$ pip install apache-airflow[mysql]
修改airflow.cfg的配置
[core]
executor = LocalExecutor
sql_alchemy_conn = mysql://root:[email protected]:3306/airflow
运行airflow initdb
,在mysql创建airflow数据库内容
Postgres
这里采用docker提供postgresql服务
$ docker pull postgres
运行postgres容器
$ docker -d -p 5432:5432 --name postgres postgres
进入postgres容器,创建airflow数据库
$ docker exec -it a09 /bin/bash
root@***: su - postgres
postgres@***: psql
psql: CREATE DATABASE airflow;
psql: \l
安装airflow的postgres组件
$ pip install apache-airflow[postgres]
修改airflow.cfg配置
sql_alchemy_conn = postgresql+psycopg2://postgres:@192.168.73.131:5432/airflow
初始化airflow数据库内容
$ airflow initdb
Connection
Airflow经常需要与各种服务、存储连接,Airflow的webserver提供Admin->Connection
界面用于管理连接信息。
默认,Airflow会将连接的密码以明文形式保存在metadata database,因此如果需要加密存储,则需要在安装
crypto
(该包依赖libffi-dev)。如果crypto包并没有在初始时安装,则可以先安装crypto包
pip install apache-airflow[crypto]
生成fernet_key,它是base64-encoded32-byte的key
from cryptography.fernet import Fernet
fernet_key= Fernet.generate_key()
print(fernet_key) # your fernet_key, keep it in secured place!
在airflow.cfg替换fernet_key值,或者是使用环境变量
# Note the double underscores
EXPORT AIRFLOW__CORE__FERNET_KEY = your_fernet_key
重启Airflow webserver,