部分安装方法参考: Linux 虚拟机:大数据集群基础环境搭建(Hadoop、Spark、Flink、Hive、Zookeeper、Kafka、Nginx)
一、Python 安装
当前安装版本为 Python-3.9,使用源码包安装
- 下载源码包或者 wget 下载
wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz
- 解压到指定目录
tar -zxvf Python-3.9.6.tgz
- 依赖环境安装
sudo yum -y install vim unzip net-tools && sudo yum -y install wget && sudo yum -y install bzip2 && sudo 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 && sudo yum -y install libglvnd-glx && sudo yum -y install gcc gcc-c++
- 预配置
cd Python-3.9.6
./configure --prefix=/xxx/program/python3
- 编译安装
make && make install
- 配置环境变量或者将 python3 软链接放到 /usr/bin 中
sudo ln -s /xx/xx/python3.9 /usr/bin/python3.9
sudo ln -s /xx/xx/pip3.9 /usr/bin/pip3.9
二、Airflow 安装
- 更新 pip
pip3.9 install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 更新 setuptools
pip3.9 install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 下载 airflow
pip3.9 install apache-airflow -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 配置 airflow 环境命令
sudo ln -s /xxx/python-3.9.6/bin/airflow /usr/bin/airflow
三、Airflow 配置
这里我使用的是 docker 安装的 mysql5.7,具体参考: Linux 虚拟机:大数据集群基础环境搭建(Hadoop、Spark、Flink、Hive、Zookeeper、Kafka、Nginx)
官方文档:设置 MySQL 数据库
- 下载连接驱动
pip3.9 install mysql-connector-python -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 修改 airflow.cfg 文件
- 这个文件在对应用户的 home 目录下,也就是 ~/airflow/airflow.cfg
- 找到 [database] 模块,注释掉之前的 sqlite,新加 mysql 配置
sql_alchemy_conn = mysql+mysqlconnector://root:123456@hybrid03:3306/airflow_db
- 创建 MySQL 数据库
create database airflow_db character set utf8mb4 collate utf8mb4_unicode_ci;
- 修改配置文件 my.cnf
- docker 安装的 mysql5.7 中 my.cnf 在 /etc/my.cnf,可以把它复制到挂载的配置文件夹,通过宿主机去修改,然后再覆盖原来的(docker 容器内没有 vi/vim)
- 在 my.cnf [mysqld] 添加下面的配置,修改后重启 mysql (docker restart mysql)
explicit_defaults_for_timestamp=1
- 初始化 airflow db
airflow db init
- 修改本地调度器
- 修改 airflow.cfg,注释掉原来的配置,修改成 executor = LocalExecutor
- 创建用户
airflow users create --username admin --firstname admin --lastname admin --role Admin --email xxx@xxx.com
- 启动
airflow webserver -p 8080 -D
airflow scheduler -D
- 停止
ps -ef | egrep 'scheduler|airflow-webserver'| grep -v grep | awk '{print $2}' | xargs kill -15
四、存在的坑
- 下载后的 airflow 命令在 Python 安装目录下的 bin 目录里面,如果没有配置环境变量的话会以为没有这个命令
- 开始没有更新 setuptools,有些地方报错 error: subprocess-exited-with-error,后面更新了一下 setuptools 就顺利安装
Collecting unicodecsv>=0.14.1
Downloading http://pypi.doubanio.com/packages/6f/a4/691ab63b17505a26096608cc309960b5a6bdf39e4ba1a793d5f9b1a53270/unicodecsv-0.14.1.tar.gz (10 kB)
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [1 lines of output]
ERROR: Can not execute `setup.py` since setuptools is not available in the build environment.
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
- 使用 airflow 命令报错:airflow.exceptions.AirflowConfigException: error: sqlite C library version too old (< 3.15.0)
- airflow 默认使用的是 sqlite 作为数据库,系统默认的版本过低,如果要使用该数据库的话需要手动更新,一般建议更改为 MySQL
- sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1067 (42000): Invalid default value for ‘updated_at’
- 原因:字段 ‘update_at’ 是 timestamp 类型,默认给的是空值,所以导致失败
- 修改 MySQL 的 my.cnf,参考上面的步骤