当第一次运行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_connbroker_urlcelery_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,

results matching ""

    No results matching ""