宿主机搭建 Airflow 环境指引

一、查看主机环境

本分享以 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 &

猜你喜欢

转载自blog.csdn.net/TFATS/article/details/125960207