说明
本次环境采用在线环境安装
安装Docker
#! /bin/bash
echo "---------开始安装---------"
sleep 1
echo "############判断是否安装了docker##############"
if ! type docker >/dev/null 2>&1; then
cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
echo 'docker 未安装';
echo '开始安装Docker....';
yum -y install docker-ce
echo '配置Docker开启启动';
systemctl enable docker
systemctl start docker
cat >> /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
else
echo 'docker 已安装';
fi
安装Mysql
docker run -p 3315:3306 --name mysql5.7 \
-v /usr/local/docker/mysql5.7/conf:/etc/mysql/mysql.conf.d \
-v /usr/local/docker/mysql5.7/log:/var/log/ \
-v /usr/local/docker/mysql5.7/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=asd123456 \
-d mysql:5.7
安装redis
docker run --name redis -p 6379:6379 -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
升级Openssl
安装依赖
yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel pcre-devel
下载安装/usr/local/src
cd /usr/local/src
mkdir openssl
cd openssl
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
tar xzf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
编译安装
./config
make
make install
echo "/usr/local/lib64/" >> /etc/ld.so.conf
ldconfig
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/bin/openssl /usr/bin/openssl
检查openssl版本
openssl version
安装Python3.9.8
离线环境下
install
或者download
最好加上-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
,否则会报错,关于https的。
安装依赖
yum install -y ncurses-devel gdbm-devel xz-devel sqlite-devel tk-devel uuid-devel readline-devel bzip2-devel libffi-devel
下载安装包到/usr/local/src
cd /usr/local/src
mkdir python
cd python
wget https://www.python.org/ftp/python/3.9.8/Python-3.9.8.tgz
tar xzf Python-3.9.8.tgz
cd Python-3.9.8
编译安装到/usr/local/python398
./configure --prefix=/usr/local/python398
make
make install
查看版本
python3 --version
创建虚拟环境
cd /usr/local/python398/bin
./pip3 install virtualenv -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
创建虚拟环境
virtualenv venv
virtualenv --no-site-packages # 创建一个独立的 Python 虚拟环境,该环境不会继承全局安装的软件包
进入虚拟环境
cd venv
source ./bin/activate
安装airflow
注意,此刻都在虚拟环境下
官网:https://airflow.apache.org/docs/apache-airflow/2.3.2/howto/set-up-database.html
安装基础库
pip3 install mysql-connector-python
pip3 install pymysql
pip3 install redis # 不安装的话,测试DAG的时候会报错
pip install mysqlclient==2.0.3
pip install celery
安装aiflow
注意:
-
在虚拟环境下安装,否则会报错
-
如果网络差,会报
Retry
可以将CONSTRAINT_URL
文件下载使用mkdir airflow_whl cd airflow_whl pip3.9 download apache-airflow==2.3.2 --constraint /opt/sun.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com pip3.9 install *
export AIRFLOW_HOME=~/airflow
AIRFLOW_VERSION=2.3.2
PYTHON_VERSION="$(python3 --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
pip3 install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}" -i
http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
报错:sqlite版本 < 3.15.0
airflow.exceptions.AirflowConfigException: error: sqlite C library version too old (< 3.15.0). See https://airflow.apache.org/docs/apache-airflow/、上述问题解决后,继续下一步
初始化数据库
# 初始化数据库
airflow db init
# 创建用户
airflow users create --username airflow --firstname airflow --lastname airflow --role Admin --email xx@qq.comspiderman@superhero.org
# 提示输入密码
Password:
Repeat for confirmation:
Admin user admin created
启动服务
# start the web server, default port is 8080
# 前台启动,会一直输出日志
airflow webserver --port 8080
# 后台启动
airflow webserver --port 8080 -D
airflow scheduler -D
防火墙设置
# 开通 8080 端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
# 查看开放的端口列表
firewall-cmd --zone=public --list-ports
命令
# initialize the database tables
airflow db init
# print the list of active DAGs
airflow dags list
# prints the list of tasks in the "tutorial" DAG
airflow tasks list tutorial
# prints the hierarchy of tasks in the "tutorial" DAG
airflow tasks list tutorial --tree
# 单独测试执行wyh_test这个dag下的print_date和hello_task这两个task, 后面跟着的是逻辑时间
airflow tasks test wyh_test print_date 2020-06-01
airflow tasks test wyh_test hello_task 2020-06-01
# 该命令在本地运行任务实例,将其日志输出到stdout(在屏幕上),不打扰依赖项,
# 并且不与数据库通信状态(运行,成功,失败等)。
# 它仅仅只是测试单个任务实例。
更改Sqlite -> MySQL
CREATE DATABASE airflow CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'airflow' IDENTIFIED BY 'airflow';
GRANT ALL PRIVILEGES ON airflow.* TO 'airflow';
flush privileges;
$AIRFLOW_HOME/airflow.cfg文件中修改
# 配置mysql
sql_alchemy_conn = mysql+pymysql://airflow:airflow@127.0.0.1/airflow
# 配置支持并行性的工作器,官网不推荐在开发中使用顺序执行器,会造成任务调度阻塞
executor = LocalExecutor
# 若之前使用sqllite初始化过,需要
# 重置数据库
airflow db reset
# 初始化数据库
airflow db init
注意修改MySQL的配置否则会报错如下:
Exception: Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql
mysql -u root
show global variables like '%timestamp%';
set global explicit_defaults_for_timestamp =TRUE;
exit;
service mysql restart #可以暂时不重启,测试完是否会继续报错
接着重新注册角色用户
启动webserver 和 schedule
配置CeleryExecutor
要先配置好redis
vim airflow.cfg
executor = CeleryExecutor
broker_url = redis://IP:6379/0
result_backend = db+mysql://airflow:airflow@IP/airflow
之后启动worker
airflow celery worker -D # 有个问题,后台启动后,页面任然会报没启动,不加 `-D`正常
注意:
-
报错
- File "/usr/local/python398/bin/venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
return import("MySQLdb")
ModuleNotFoundError: No module named 'MySQLdb'
pip install mysqlclient==2.0.3 pip install celery
-
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [16 lines of output]
/bin/sh: mysql_config: command not found
/bin/sh: mariadb_config: command not found
/bin/sh: mysql_config: command not found
yum install mysql-devel
- File "/usr/local/python398/bin/venv/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
集群部署
其实是利用Celery把任务发给集群中其他的机器,搞几台机器设置成Worker角色。
相同配置的airflow安装到其他机器上,配置文件更要一致。
再执行airflow celery worker
就激活了一个Worker.
升级Sqlite
下载
cd /usr/local/src
wget https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz
tar -zxvf sqlite-autoconf-3360000.tar.gz
cd sqlite-autoconf-3360000
安装
./configure --prefix=/usr/local
make && make install
检查版本,确认是否升级成功
sqlite3 -version
添加到库路径,否则仍然会报错(官方说明 : Post install add /usr/local/lib to library path)
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
安装ClickHouse
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
yum install -y clickhouse-server clickhouse-client
# 默认没有密码
systemctl enable clickhouse-server
systemctl start clickhouse-server
其他
采用yumdownload下载所需的依赖包
yum -y install yum-utils
yumdownloader --resolve --destdir /usr/local/rpm gcc gcc-c++ autoconf automake zlib zlib-devel pcre-devel
-
下载单个软件包:
yumdownloader <package-name>
例如,要下载名为
example-package
的软件包,可以执行:yumdownloader example-package
-
下载软件包的所有依赖项:
yumdownloader --resolve <package-name>
使用此命令,
yumdownloader
将下载指定软件包及其所有依赖项。 -
指定下载目录:
yumdownloader --destdir=<download-directory> <package-name>
通过设置
--destdir
选项,您可以指定软件包的下载目录,默认情况下下载至当前工作目录。 -
禁用 GPG 校验:
yumdownloader --nogpgcheck <package-name>
如果要下载的软件包没有有效的 GPG 密钥校验,可以使用
--nogpgcheck
选项跳过 GPG 校验。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类