一、查看主机环境
本分享以 CentOS 为例
cat /etc/redhat-release
# ----output----
CentOS Linux release 7.9.2009 (Core)
二、安装 Python3 环境
查看是否已存在 Python3 环境,若不存在则安装
# 若不存在则使用如下命令安装
which python3 # python --version
1、CentOS 安装依赖
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 libffi-devel gcc gcc-c++ wget make pcre pcre-devel openssl vim dos2unix crontab mysql-devel
2、创建对应文件夹
# 创建编译的安装目录
mkdir /usr/local/Python3.7.2 #创建编译安装目录(命名为版本比较好)
# 进入源码包解压后的文件夹
cd /usr/local/Python3.7.2
3、下载 Python 源码
# 从 Python 官网下载源码包
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
# 解压源码包, 准备编译
tar -xJf Python-3.7.2.tar.xz
4、安装下载的 Python 源码
# 进入源码包解压后的文件夹
cd /usr/local/Python3.7.2/Python-3.7.2
# 开始编译, 等待生成安装文件
./configure --prefix=/usr/local/Python3.7.2
# 开始安装 (如果存在 _ctypes 报错, 则安装 yum -y install libffi-devel)
make && make install
5、配置软链接
ln -s /usr/local/Python3.7.2/bin/python3 /usr/local/bin/python3
ln -s /usr/local/Python3.7.2/bin/pip3 /usr/local/bin/pip3
6、验证 Python 版本
# 验证 Python 版本
python3 -V
# 验证 pip 版本
pip3 -V
7、更新 pip 到最新版本
pip3 install -U pip
三、安装 Docker Service
查看是否已存在 Docker 环境,若不存在则安装
# 若不存在则使用如下命令安装
which docker # docker --version
1、安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
4、开启Docker服务
sudo service docker start
5、测试安装
docker version
6、添加Docker 代理
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"registry-mirrors": [
"https://uqvzue7x.mirror.aliyuncs.com",
"https://k7da99jp.mirror.aliyuncs.com",
"https://dockerhub.azk8s.cn",
"https://registry.docker-cn.com"
],
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker:
四、安装 mysql 容器
1、构建 mysql 容器
# 拉去镜像
docker pull mysql:8.0.29
# 运行mysql8
vim create_mysql_container.sh
#!/bin/bash
docker run -itd \
-p 33306:3306 \
-v /etc/localtime:/etc/localtime \
-v /data/mysql/conf:/etc/mysql \
-v /data/mysql/logs:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/my.cnf:/etc/mysql/my.cnf \
-v /data/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD='xxx' \
--name airflow-mysql-8 \
mysql:8.0.29
# 构建 mysql 容器
bash create_mysql_container.sh
2、创建用户
# 进入mysql容器,进入mysql
docker exec -it airflow-mysql-8 mysql -u root -p
# —— 创建用户
create user 'airflow'@'%' identified by 'airflow';
create user 'airflow'@'localhost' identified by 'airflow';
# —— 创建数据库
create database airflow character set utf8mb4;
# —— 将数据库airflow的所有权限授权airflow用户
grant all on airflow.* to 'airflow'@'%';
grant all on airflow.* to 'root'@'%';
# —— 刷新权限
flush privileges;
五、执行 airflow 安装命令
1、执行 airflow 安装命令
# 安装airflow
echo "export AIRFLOW_HOME=/data/airflow" >> /root/.bashrc
source /root/.bashrc
pip3 install apache-airflow==2.3.3 --no-cache-dir
2、解决目录 /data/airflow 未生成 问题
若执行 airflow 报错:“-bash: airflow: 未找到命令” 则执行如下指令:
vim ~/.bash_profile
# 加入下行
PATH=$PATH:$HOME/bin:/usr/local/Python3.7.2/bin
# 使之生效
source ~/.bash_profile
# 执行 airflow
airflow
3、若报错 sqlite 版本过低(若使用 PostgreSQL 、Mysql 则跳过)
Airflow 默认带有一个SQLite后端。这允许用户在没有任何外部数据库的情况下运行 Airflow。但是,这样的设置仅用于测试目的;在生产中运行默认设置可能会导致多种情况下的数据丢失。如果要运行生产级 Airflow,请确保将后端配置为外部数据库,例如 PostgreSQL 或 MySQL。
若执行 airflow 报错: airflow.exceptions.AirflowConfigException: error: sqlite C library version too old (< 3.15.0)
# 查看 sqlite3 版本
sqlite3 -version
# 若无 sqlite3,则安装 sqlite3
sudo yum install sqlite-devel
# 升级 sqlite3 版本
wget https://www.sqlite.org/2022/sqlite-autoconf-3390100.tar.gz
# 解压、编译
tar zxvf sqlite-autoconf-3390100.tar.gz
cd sqlite-autoconf-3390100
./configure --prefix=/usr/local
make && make install
# 删除旧版,替换新版
mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
echo "/usr/local/lib" > /etc/ld.so.conf.d/sqlite3.conf
ldconfig
# 最后查看sqlite3的版本是否符合报错要求
sqlite3 -version
4、修改airflow配置
# 修改配置airflow.cfg
cd /data/airflow && vim airflow.cfg
# 配置数据库,这里使用了 mysql
executor = LocalExecutor
# sql_alchemy_conn = mysql+pymysql://<MySQL用户名>:<MySQL密码>@<MySQL地址>:<MySQL端口>/airflow
sql_alchemy_conn = sql_alchemy_conn = mysql+pymysql://<MySQL用户名>:<MySQL密码>@<MySQL地址>:<MySQL端口>/airflow?charset=utf8
# 修改 webserver 地址
[webserver]
#base_url = http://{IP}:{PORT}
base_url = http://{IP}:{PORT}
# 刷新数据库配置
airflow db init/upgrade
# 创建管理员用户
airflow users create \
--username xxx \
--password xxx \
--firstname xxx \
--lastname xxx \
--role xxx \
--email xxx.com
六、安装 python 依赖包
vim requirements.txt
pymysql
pandas
redis
redis-py-cluster
clickhouse-driver
apache-airflow-providers-dingding
apache-airflow-providers-ssh
# 安装 python 依赖包
pip install -r requirements.txt
七、运行 airflow dags
1、 修改 airflow.cfg 文件
# 存放 dag 路径
dags_folder = xxx
load_examples = False
airflow db upgrade
2、重启 airflow
# 停止服务
ps -ef | grep airflow | cut -c 9-15 | xargs kill -9
# 启动 Airflow webserver和scheduler
#启动web服务,默认端口8080
nohup airflow webserver >>werserver.log 2>&1 &
#启动定时任务
nohup airflow scheduler >>scheduler.log 2>&1 &
nohup airflow webserver >>werserver.log 2>&1 &
nohup airflow scheduler >>scheduler.log 2>&1 &