Ubuntu上搭建airflow+celery以及配置环境

文章目录

  • 1、框架
  • 2、搭建过程
    • 2.1 基础工作-新建airflow用户和目录
    • 2.2 下载并安装anaconda:miniconda
    • 2.3 新建airflow的python环境
    • 2.4 初始化airflow
    • 2.5 修改配置文件
    • 2.6 初始化后端数据库
    • 2.7 为访问airflow web时添加用户
  • 3、启动服务
  • 参考资料:

1、框架

服务器环境介绍:

  • Ubuntu 16.04.5 LTS
  • 配置:8核 16G

框架介绍:

Celery 是分布式任务队列,与调度工具 airflow 强强联合,可实现复杂的分布式任务调度,这就是CeleryExecutor。
Celery 需要一个发送和接受消息的传输者 broker。RabbitMQ 和 Redis 是官方推荐的生产环境级别的 broker,我们选择Redis。

MySQL:后端数据库
CeleryExecutor:执行器
Redis:Message broker,消息中间件
Ubuntu上搭建airflow+celery以及配置环境_第1张图片

2、搭建过程

说明:
/data/projects/code:存储各个项目。
/data/projects/airflow_config:存储airflow相关的文件。

2.1 基础工作-新建airflow用户和目录

登陆服务器切换到root用户,然后新建目录用于存放Python项目代码:

sudo bash
mkdir /data/projects/code  

新建airflow的用户并修改文件权限``:

# 新建
adduser af_user
# 修改该用户对logs文件、代码文件目录的权限:
chown af_user:af_user /data/projects

新建目录:

mkdir -p /data/projects/airflow_config
mkdir -p /data/projects/code

2.2 下载并安装anaconda:miniconda

miniconda就够用了。
1、下载
root用户下,下载anaconda安装包:
a.打开 anaconda清华镜像源
b.选择linux-x86的一个版本,右键拷贝链接地址。
c.下载:例如,

cd /data
# wget url
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh

如果连接超时,看是否是因为禁止访问外网。
如果下载特别慢,那就本地下载后上传包至服务器。

2、安装anaconda
a.安装

#sh [安装包名]
sh Miniconda3-latest-Linux-x86_64.sh

注意:安装过程中,会提示安装目录,修改一下,选择 /data/anaconda3 作为安装目录(必须是一个不存在的目录)。
b.确保添加了环境变量:vim /etc/profile,如果没有,则末尾一行添加:export PATH="/data/anaconda3/bin:$PATH"

2.3 新建airflow的python环境

1、创建环境,root用户下:

conda create -n airflow-py36  python=3.6

2、切换到新建的af_user用户:

su -l af_user

3、初始化anaconda:conda init,如果前面没有在/etc/profile添加anaconda的PATH,那就得这样:/data/anaconda3/bin/conda init
4、激活刚刚创建的py环境并安装包:

# 激活环境
conda activate airflow-py36
# 看下当前的pip是否正确:应该输出的是 airflow-py36下的bin/pip
which pip

安装所需的包:按需安装吧。

pip install apache-airflow
pip install 'apache-airflow[async]'
pip install 'apache-airflow[celery]'
pip install 'apache-airflow[redis]'
pip install pymysql # 报错的话 需apt-get install libmysqlclient-dev
pip install mysqlclient
pip install flask_bcrypt # 安这个是因为后面initdb时报缺少包的错误

airflow被安装到了/home/af_user/.local/下。

另外,如果pip安装特别慢的话,需要配置pip源,即 在~/ 新建 .pip/pip.conf文件:

cd ~
mkdir -pv .pip
vim ~/.pip/pip.conf

可以配置阿里云镜像源,或其他的镜像源:

[global]
index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/
[list]
format=columns
[install]
trusted-host=mirrors.cloud.aliyuncs.com

5、添加环境变量
root用户切换到af_user 并编辑.bashrc文件

su -l af_user
vim ~/.bashrc
export AIRFLOW_HOME="/data/projects/airflow_config"
export PYTHONPATH="/data/projects/code/[YOUR_PYHTON_PROJECT_NAME]:$PYTHONPATH"  
export PATH="/data/anaconda3/envs/air-py36/bin:$PATH"

其中,
a. export第一行,若不指定AIRFLOW_HOME,则默认是 ~/airflow,为了方便管理可以修改为我们最开始指定的路径,这样在后面运行airflow时会在$AIRFLOW_HOME下生成airflow.cfg文件以及logs等目录。
b. export 第二行,Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找,这里可以把项目路径添加进来。
c.export第三行,添加airflow的python路径。

注意:~/.bashrc 文件只对当前用户生效。

2.4 初始化airflow

执行airflow就会初始化:airflow
发现在$AIRFLOW_HOME下新增了几个文件和目录。

2.5 修改配置文件

第一次运行airflow时,它会在$AIRFLOW_HOME目录中创建一个名为airflow.cfg的配置文件。
文件的各项参数解释见:https://www.cnblogs.com/skyrim/p/7456166.html

下面列举需要修改的参数:
[core]

  1. dags_folder:dag python文件目录,需要修改,指定到python里专门存放dag文件的目录例如 /data/projects/code/[YOUR_PYTHON_PROJECT_NAME]/dags
  2. base_log_folder:主日志目录,默认是$AIRFLOW_HOME/logs,存储dag里的task执行日志存储目录。
  3. child_process_log_directory:scheduler的日志文件存储路径,默认是$AIRFLOW_HOME/logs/scheduler,例如 /data/projects/airflow_config/logs/scheduler
  4. dag_processor_manager_log_location:默认是$AIRFLOW_HOME/logs/dag_processor_manager/dag_processor_manager.log
  5. plugins_folder:默认是 $AIRFLOW_HOME下/plugins,例如/data/work/airflow_config/plugins
  6. default_timezone:时区,默认是UTC,需要修改为 Asia/Shanghai
  7. executorCeleryExecutor
  8. 后端数据库配置
# airflow后端数据库地址,数据库需提前建好.
sql_alchemy_conn = mysql+mysqldb://[your_db_user_name]:[your_db_pwd]@[your_mysql_host_address]:[port]/[your_schema_name]

# 编码,如果上面的conn结尾指定了 添加了?charset=utf8mb4,则需注释掉 sql_engine_encoding。
sql_engine_encoding = utf-8
  1. dags_are_paused_at_creation:dag在创建以后是否是暂停状态,改为False,这样新建dag提交后会打开,省去麻烦。

[webserver]

  1. web url配置:
base_url = http://[xx.xx.xx.xx]:8080
web_server_host = [IP]
web_server_port = [port]
  1. web页面权限控制:需要密码。
authenticate = True
auth_backend = airflow.contrib.auth.backends.password_auth

[smtp]
12.

smtp_host = smtp.exmail.qq.com
smtp_starttls = False
smtp_ssl = True
# Example: smtp_user = airflow
smtp_user = [xxxxx]@[公司域名]
# Example: smtp_password = airflow
smtp_password = [PWD]
smtp_port = 465
smtp_mail_from = [xxxxx]@[公司域名]

[celery]
13.

broker_url = redis://:[pwd_redis]@[redis_host_adddress]:[port]/[db编号不能重复]

result_backend = redis://:[pwd_redis]@[redis_host_adddress]:[port]/[db编号不能重复]

2.6 初始化后端数据库

airflow inintdb

如果提示缺少MySQLdb模块,则 pip install mysqlclient。安好后再次初始化。
可能提示缺少

记住:如果初始化过一次,那么最好把后端数据库先清空,然后再初始化。不然可能会和我一样,初始化以及启动web server、sheduler时遇到各种后端数据库表 column notfound的问题,血坑啊……

2.7 为访问airflow web时添加用户

设置web server的用户名和密码:
https://airflow.apache.org/docs/stable/security.html

切换root用户:sudo bash
激活airflow的python环境: conda activate airflow-py36
进入pythonj交互:pyhton
开始新建用户。代码参考。

import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = 'YOUR_WEB_USER_NAME'
user.password = 'YOUR_WEB_USER_PWD'
session = settings.Session()
session.add(user)
session.commit()
session.close()
exit()

假如在import airflow时 有报缺少包的错误,就一一安装。

3、启动服务

af_user下,激活airlfow的python环境:conda activate airflow-py36

af_user用户下分别执行:
airflow webserver
airflow scheduler
airflow worker

启动webserver后:在浏览器打开url,输入用户名和密码,
Ubuntu上搭建airflow+celery以及配置环境_第2张图片

OK,就到这里了。
以后有时间介绍下通过tmux启动airlfow服务,这样即使关闭了与服务器的ssh连接,airflow的服务也会正常运行,不会被打断。
感兴趣的可以参考这篇自学tmux:tmux的使用方法

参考资料:

airflow中文文档
官网(新建web 用户名&添加密码)
Celery-简书
airflow 配置 CeleryExecutor
Airflow安装
使用Celery扩大规模
airflow + CeleryExecutor 环境搭建
AirFlow使用指南一 安装与启动

你可能感兴趣的:(airflow)