Airflow2.0.0 + Celery 集群搭建

1、说明

  • 依赖python环境、基于pip安装apache-airflow
  • 安装过程可能会缺少系统依赖报错如gcc、mysql-devel 之类, 缺什么就 yum install 什么即可

2、airflow + celery架构

Airflow2.0.0 + Celery 集群搭建_第1张图片

3、集群规划

服务器hadoop100 服务器hadoop101 服务器hadoop102
web server V
scheduler V
worker V V V

注意

  • 编写DAG文件需要保证在集群每个节点都要同步,因为每个worker都是从本地进行读取执行的, 不像oozie那样上传到HDFS. scheduler仅仅是发送一条要执行哪个DAG下的哪个Task的命令到Queue Broker下, 然后worker再根据命令去指定指定的那个Task.
  • 集群里面的airflow.cfg配置文件也需要保持同步

4、安装

4.1、下载apache-airflow、celery、mysql、redis包

1、在3台机器上都要下载一次

以下是在hadoop101上执行, 在hadoop100,hadoop102一样的下载

[hadoop@hadoop101 ~]$ pip3 install apache-airflow==2.0.0 
[hadoop@hadoop101 ~]$ pip3 install apache-airflow[celery]
[hadoop@hadoop101 ~]$ pip3 install apache-airflow[reids] -i 
http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2、配置Airflow工作目录的环境变量

  • 在3台机器上都要配置一次、最好使用xsync脚本同步
[hadoop@hadoop101 ~]$ vim /etc/profile
添加如下
export AIRFLOW_HOME=~/app/airflow

3 配置airflow命令

  • 下载apache-airflow包后,在python环境的bin目录下会生成airflow命令, 需要自己配置到全局调用, 我是用软连接挂在到/usr/local/bin

[hadoop@hadoop101 bin]$ pwd
/usr/local/python3/bin
[hadoop@hadoop101 bin]$ ll | grep airflow
-rwxr-xr-x. 1 hadoop hadoop      231 1月   6 19:58 airflow

# 创建软连接
[hadoop@hadoop101 bin]$ ln -s /usr/local/python3/bin/airflow /usr/local/bin/airflow
[hadoop@hadoop101 bin]$ cd /usr/local/bin/
[hadoop@hadoop101 bin]$ ll
lrwxrwxrwx. 1 root   root    30 1月   7 10:26 airflow -> /usr/local/python3/bin/airflow

使用命令airflow --help看是否执行成功, 执行airflow的任何命令都会初始化airflow的工作目录的生成(在${AIRFLOW_HOME}目录下)

[hadoop@hadoop101 airflow]$ pwd
/home/hadoop/app/airflow
[hadoop@hadoop101 airflow]$ ll
总用量 24488
-rw-rw-r--. 1 hadoop hadoop    38857 1月   7 20:09 airflow.cfg
drwxrwxr-x. 9 hadoop hadoop      179 1月   7 20:05 logs
-rw-rw-r--. 1 hadoop hadoop     2619 1月   7 10:26 unittests.cfg
-rw-rw-r--. 1 hadoop hadoop     4279 1月   7 10:26 webserver_config.py

4.2、配置元数据库

  • 修改 ${AIRFLOW_HOME}/airflow.cfg配置文件, 配置远程连接数据库的地址, 需要先创建一个叫airflow的数据库. 因为默认使用的是sqlite作为元数据库不支持DAG任务的并发执行、绝不能用于生产环境
  • 需要设置mysql的my.cnf 文件下的 `[mysqld] 的 explicit_defaults_for_timestamp=1 才能正常连接成功
[core]
# 时区设置
default_timezone = Asia/Shanghai
# 数据库连接设置
sql_alchemy_conn = mysql+mysqldb://airflow:123456@www.burukeyou.com:3306/airflow?charset=utf8
# 数据库编码
sql_engine_encoding = utf-8

4.3、配置celery

  • 修改 ${AIRFLOW_HOME}/airflow.cfg配置文件, 配置celery和executor相关配置
# 设置执行策略、可选SequentialEXecutor(默认)、LocalExecutor(适合单机)、Celery Executor
executor = CeleryExecutor
# 配置celery的broker_url			(存储要执行的命令然后celery的worker去消费)
broker_url = redis://127.0.0.1:6379/0
# 配置celery的result_backend  (存储任务执行状态)、 也可以用redis存储
result_backend = db+mysql://airflow:123456@www.burukeyou.com:3306/airflow?charset=utf8
#result_backend = redis://127.0.0.1:6379/1

4、其他airflow.cfg 配置(可选)

# web ui 界面使用的时区
default_ui_timezone=Asia/Shanghai
# 是否加载案例demo
load_examples = False
# 是否执行以前未执行的DAG Run, 定义每个DAG对象可传递catchup参数覆盖
catchup_by_default = False

5、启动

5.1 初始化元数据库表生成

  • 执行如下命令成功后, 查看数据库airflow下是否生成各个表
[hadoop@hadoop101 ~]$ airflow db init

5.2 启动web server、scheduler、worker

  • 在hadoop101上启动web server、scheduler、worker
  • 在hadoop100和102上启动worker
[hadoop@hadoop101 ~]$  airflow webserver --port 9988  # -D 参数以守护进程启动(以下均适用)
[hadoop@hadoop101 ~]$  airflow scheduler -D
[hadoop@hadoop101 ~]$  airflow celery worker -D # -q 可指定worker监听消费的队列,默认是default队列
[hadoop@hadoop100 ~]$  airflow celery worker -D 
[hadoop@hadoop102 ~]$  airflow celery worker -D

访问 hadoop101:9988的web server 的UI界面

Airflow2.0.0 + Celery 集群搭建_第2张图片

发现需要账号密码、创建一个即可.

[hadoop@hadoop101 ~]$airflow users create \
    --username hadoop \
    --firstname hadoop \
    --lastname hadoop \
    --role Admin \
    --email xx@xx.com

Airflow2.0.0 + Celery 集群搭建_第3张图片
之后在${AIRFLOW_HOME}/dags 编写自己的DAG任务即可, DAG文件名以包含dag或者airflow就会被scheduler去调度执行. 会根据 DAG对象的start_dateschedule_interval两个参数去生成每个DAG RUN的时间点, 时间到了就会触发执行.

tip:

  • start_date和schedule_interval 两个参数去配置定时的周期可不是从字面上看上那么简单.
  • 见 Airflow 官方文档 FAQ
  • 见 Airflow 官方文档 DAG RUN

打赏

如果觉得文章有用,你可鼓励下作者(支付宝)

在这里插入图片描述

你可能感兴趣的:(运维部署,定时任务,python,大数据)