NWNU-Sun | 技术沉思录

代码是诗,bug是谜

   ::  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  77 随笔 :: 49 文章 :: 6 评论 :: 40763 阅读

说明

本次环境采用在线环境安装

安装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 #可以暂时不重启,测试完是否会继续报错

接着重新注册角色用户
启动webserverschedule

配置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
    

集群部署

​ 其实是利用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
  1. 下载单个软件包:

    yumdownloader <package-name>
    

    例如,要下载名为 example-package 的软件包,可以执行:

    yumdownloader example-package
    
  2. 下载软件包的所有依赖项:

    yumdownloader --resolve <package-name>
    

    使用此命令,yumdownloader 将下载指定软件包及其所有依赖项。

  3. 指定下载目录:

    yumdownloader --destdir=<download-directory> <package-name>
    

    通过设置 --destdir 选项,您可以指定软件包的下载目录,默认情况下下载至当前工作目录。

  4. 禁用 GPG 校验:

    yumdownloader --nogpgcheck <package-name>
    

    如果要下载的软件包没有有效的 GPG 密钥校验,可以使用 --nogpgcheck 选项跳过 GPG 校验。

posted on   匿名者nwnu  阅读(50)  评论(0编辑  收藏  举报
编辑推荐:
· .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技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示