| 主机 | webserver | scheduler | worker | flower |
|---|---|---|---|---|
| airflow08 | ✅ | ✅ | ✅ | ✅ |
| airflow09 | ❌ | ❌ | ✅ | ❌ |
| airflow10 | ❌ | ❌ | ✅ | ❌ |
首先通过yum安装一些编译时所需的依赖包:
yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install libffi-devel -y
下载
[root@airflow10 ~]# cd ~ [root@airflow10 ~]# wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz [root@airflow10 ~]# tar -zxvf Python-3.8.3.tgz
进入解压后的目录,按照以下步骤完成编译安装:
[root@airflow10 ~]# cd Python-3.8.3 [root@airflow10 ~]# ./configure --prefix=/usr/local/python3 [root@airflow10 ~]# make && make install
安装完成后,需要配置一下系统环境变量,以便使用Python的命令:
[root@airflow10 ~]# vim /etc/profile PYTHON_HOME=/usr/local/python3 export PATH=$PATH:$PYTHON_HOME/bin [root@airflow10 ~]# source /etc/profile
清理一下现在的python3软连接以及pip3软连接(可略过)
rm /usr/bin/python3 ln -s /usr/local/python/bin/python3.8 /usr/bin/python3 rm /usr/bin/pip3 ln -s /usr/local/python/bin/pip3 /usr/bin/pip3
最后验证版本:
[root@airflow10 bin]# pip3 --version pip 19.2.3 from /usr/local/python3/lib/python3.8/site-packages/pip (python 3.8) [root@airflow10 bin]# python3 Python 3.8.3 (default, Dec 6 2021, 11:30:12) [GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
更换pip国内源:
pip3 install xlrd -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
然后在用户的家目录下新建pip的配置文件,步骤如下:
cd ~ mkdir .pip cd .pip/ vim pip.conf
写入pip.conf
[global] index-url=http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com
最后记得把/usr/local/python3/目录的权限改一下
sudo chmod 775 -R /usr/local/python3/1.2 python虚拟环境
为了后期可以方便进行移植拓展,可以进行配置python虚拟环境。
第一步:安装包
pip3 install virtualenv pip3 install virtualenvwrapper
第二步, 创建一个文件夹,用于存放所有的虚拟环境:一般建议在home目录下(加.是隐形目录,可能不能直接看到)
例:
mkdir /home/sudouser/serve/python_venv
第三步,查找virtualenvwrapper所在的路径(记得加.sh要不然查到出来的路径不正确)
whereis virtualenvwrapper.sh # 或 find / -name virtualenvwrapper.sh
第四步:最重要的一步,也就是编辑.bashrc配置文件,所在路径
vim /root/.bashrc
添加以下三句:
export WORKON_HOME=/home/sudouser/serve/python_venv export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3.8 source /usr/local/python3/bin/virtualenvwrapper.sh
第五步:
source /root/.bashrc
第六步:如果创建虚拟环境报错,
ERROR: virtualenvwrapper could not find /root/.local/lib/python3.7/site-packages/virtualenv in your path
find / -name virtualenv
则增加一个配置
export WORKON_HOME=/home/sudouser/serve/python_venv export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3.8 export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/python3/bin/virtualenv source /usr/local/python3/bin/virtualenvwrapper.sh
第七步:虚拟环境的使用
# 创建跟退出 # 创建新虚拟环境:mkvirtualenv 名称 # 例: mkvirtualenv py3_dev # 退出环境: deactivate # 如果想指定一个python3来运行的虚拟环境 mkvirtualenv 虚拟环境名 -p python路径 # 例: mkvirtualenv 虚拟环境名 -p /usr/bin/python3 # 快速激活虚拟环境 workon 虚拟环境名称cd # 例: workon aw_venv1.3 下载apache-airflow、celery、mysql、redis包
在3台机器上都要下载一次
pip3 install apache-airflow==2.0.0 pip3 install apache-airflow[celery] pip3 install apache-airflow[mysql] pip3 install apache-airflow[reids] pip3 install pymysql pip3 install mysqlclient # 或者只用下面这一条命令 pip install apache-airflow[all]
配置Airflow工作目录的环境变量
# 注意在此命令时是哪个用户 vim ~/.bashrc
添加如下
export AIRFLOW_HOME=/home/sudouser/serve/airflow
配置airflow命令
下载apache-airflow包后,在python环境的bin目录下会生成airflow命令, 需要自己配置到全局调用, 用软连接挂在到/usr/bin下
如:
[sudouser@airflow10 bin]$ pwd /usr/local/python3/bin # 创建软连接 [sudouser@airflow10 bin]$ ln -s /home/sudouser/serve/python_venv/airflow_python_venv/bin/airflow /usr/bin/airflow [sudouser@airflow10 bin]$ cd /usr/bin/ [sudouser@airflow10 bin]$ ll | grep airflow 1 root root 64 Dec 6 16:55 airflow -> /home/sudouser/serve/python_venv/airflow_python_venv/bin/airflow
使用命令airflow --help看是否执行成功, 执行airflow的任何命令都会初始化airflow的工作目录的生成(在${AIRFLOW_HOME}目录下)
1.4 启动mysql,作为元数据库检查mysql状态:
netstat -tulpn #来查mysql是否在真的运行,查看3306端口是否存在,发现没有; # 或 ps -elf | grep mysqld #查询进程,发现没有mysqld_safe ,说明mysql没启动;
如果首次登陆不知道初始密码就去
vi /var/log/mysqld.log
搜索password
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YjTMNBmt-1638871826469)(/Users/wpc/Library/Application Support/typora-user-images/image-20211206172827446.png)]
如果为初始则设置密码:
set password for root@'%' = password('*****');
创建用户:
CREATE USER 'airflow_user'@'%' IDENTIFIED BY '*****'; # 赋权 GRANT ALL ON *.* TO 'airflow_user'@'%'; # 刷新 FLUSH PRIVILEGES;
启动之后设置mysql的my.cnf中的[mysqld]explicit_defaults_for_timestamp=1才能正常连接成功
2.配置 配置元数据库修改${AIRFLOW_HOME}/airflow.cfg配置文件, 配置远程连接数据库的地址, 需要先创建一个叫airflow的数据库. 因为默认使用的是sqlite作为元数据库不支持DAG任务的并发执行、绝不能用于生产环境。
[core] # 时区设置 default_timezone = Asia/Shanghai # 数据库连接设置 sql_alchemy_conn = mysql+pymysql://airflow_user:*****@airflow10:3306/airflow?charset=utf8 # 数据库编码 sql_engine_encoding = utf-8配置celery(这里务必小心,巨坑)
修改 ${AIRFLOW_HOME}/airflow.cfg配置文件, 配置celery和executor相关配置
# 设置执行策略、可选SequentialEXecutor(默认)、LocalExecutor(适合单机)、Celery Executor executor = CeleryExecutor # 配置celery的broker_url (存储要执行的命令然后celery的worker去消费) # broker_url = redis://airflow10:6379/0 broker_url = sqla+mysql://airflow_user:*****@airflow10:3306/airflow?charset=utf8 # 配置celery的result_backend (存储任务执行状态)、 也可以用redis存储 result_backend = sqla+mysql://airflow_user:*****@airflow10:3306/airflow?charset=utf8 #result_backend = redis://127.0.0.1:6379/1配置邮箱
[smtp] # If you want airflow to send emails on retries, failure, and you want to use # the airflow.utils.email.send_email_smtp function, you have to configure an # smtp server here smtp_host = smtp.exmail.qq.com smtp_starttls = True smtp_ssl = True # Example: smtp_user = airflow smtp_user = ***** # Example: smtp_password = airflow smtp_password = ***** smtp_port = 465 smtp_mail_from = ***** smtp_timeout = 30 smtp_retry_limit = 5其他airflow.cfg 配置(可选)
# web ui 界面使用的时区 default_ui_timezone=Asia/Shanghai # 是否加载案例demo load_examples = False # 是否使用catchup功能 # catchup叫追赶, 即是否执行自上次execute_date以来所有未执行的DAG Run, 另外定义每个DAG对象可传递catchup参数进行覆盖 catchup_by_default = False3.启动 初始化元数据库表生成
执行如下命令成功后, 查看数据库airflow下是否生成各个表
airflow db init启动web server、scheduler、worker
- 在airflow09上启动web server、scheduler、worker
- 在airflow08和airflow10上启动worker
[root@airflow09 ~]$ airflow webserver --port 9988 -D # -D 参数以守护进程启动(以下均适用) [root@airflow09 ~]$ airflow scheduler -D [root@airflow09 ~]$ airflow celery worker -D # -q 可指定worker监听消费的队列,默认是default队列 [root@airflow08 ~]$ airflow celery worker -D [root@airflow10 ~]$ airflow celery worker -D
访问 airflow09:9988的web server 的UI界面
发现需要账号密码、创建一个即可.
[root@airflow09 ~]$ airflow users create
--username testuser
--firstname testuser
--lastname testuser
--role Admin
--email *****
之后在${AIRFLOW_HOME}/dags 编写自己的DAG任务即可, DAG文件名以包含dag或者airflow就会被scheduler去调度执行. 会根据 DAG对象的start_date和schedule_interval两个参数去生成每个DAG RUN的时间点, 时间到了就会触发执行。
tips:
- start_date和schedule_interval 两个参数去配置定时的周期可不是从字面上看上那么简单.
- 见 Airflow 官方文档 FAQ
- 见 Airflow 官方文档 DAG RUN
airflow 系统在运行时有许多守护进程,它们提供了 airflow 的全部功能。守护进程包括 Web服务器-webserver、调度程序-scheduler、执行单元-worker、消息队列监控工具-Flower等。下面是 apache-airflow 集群、高可用部署的主要守护进程。
webserverwebserver 是一个守护进程,它接受 HTTP 请求,允许您通过 Python Flask Web 应用程序与 airflow 进行交互,webserver 提供以下功能:
- 中止、恢复、触发任务。
- 监控正在运行的任务,断点续跑任务。
- 执行 ad-hoc 命令或 SQL 语句来查询任务的状态,日志等详细信息。
- 配置连接,包括不限于数据库、ssh 的连接等。
webserver 守护进程使用 gunicorn 服务器(相当于 java 中的 tomcat )处理并发请求,可通过修改{AIRFLOW_HOME}/airflow.cfg文件中 workers 的值来控制处理并发请求的进程数。 例如:
workers = 4 #表示开启4个gunicorn worker(进程)处理web请求
启动 webserver 守护进程:
$ airfow webserver -Dscheduler
scheduler 是一个守护进程,它周期性地轮询任务的调度计划,以确定是否触发任务执行。 启动的 scheduler 守护进程:
$ airfow scheduler -Dworker
worker 是一个守护进程,它启动 1 个或多个 Celery 的任务队列,负责执行具体 的 DAG 任务。
当设置 airflow 的 executors 设置为 CeleryExecutor 时才需要开启 worker 守护进程。推荐您在生产环境使用 CeleryExecutor :
executor = CeleryExecutor
启动一个 worker守护进程,默认的队列名为 default:
$ airfow worker -Dflower
flower 是一个守护进程,用于是监控 celery 消息队列。启动守护进程命令如下:
$ airflow flower -D
默认的端口为 5555,您可以在浏览器地址栏中输入 “http://hostip:5555” 来访问 flower ,对 celery 消息队列进行监控。
5.遇到的问题:- No module named wtforms.compat
# 换版本 pip install wtforms==2.3.3
2.entry_points() got an unexpected keyword argument ‘group’
# 换版本 pip install MarkDown==2.0.1
3.OSError: mysql_config not found
yum install mysql-devel rpm -qa | grep mysql rpm -e卸载mysql # 可能会有mariaDB与mysql冲突的问题,导致安装不上6.可参考文档
airflow 的安装部署与填坑
如何部署一个健壮的 apache-airflow 调度系统
Airflow2.0.0 + Celery 集群搭建
airflow 安装,部署,填坑
Centos7安装部署Airflow详解
Airflow配置和使用



