ad

airflow2.0.2分布式安裝文本文档

必须安裝的部件

部件 作用
Airflow Webserver 查看数据库以监管和实行DAGs的web页面。
Airflow Scheduler 它查验数据库数据库查询中的DAG和每日任务的情况,
在必需时建立新每日任务,并将每日任务发送至序列。
Airflow Metadata Database 它包括DAG运作和每日任务案例的情况.
Airflow Message Broker 它将在序列中储存5201;运作的每日任务指令。
Airflow Workers 他们从序列中查找指令,运行命令,并升级数据库。

网络服务器 节点 服务项目
DATACENTER01 master1 webserver, scheduler,worker,rabbitmq(选配)
DATACENTER03 master2 webserver,scheduler
DATACENTER04 worker1 worker
DATACENTER05 worker2 worker

安裝流程:

提前准备自然环境

一、安裝erlang

由于要采用RabbitMQ,因为rabbitmq是根据erlang语言开发设计的,因此务必先安裝erlang。

版本号相匹配,如果没有规定依照文本文档来就可以

  • 安裝依靠

    yum -y install gcc glibc-devel make ncurses-devel OpenSSL-devel xmlto perl wGET gtk2-devel binutils-devel

  • 免费下载erlang

    wget http://erlang.org/download/otp_src_24.0.tar.gz

    wget https://fossies.org/linux/misc/otp_src_24.0.tar.gz(较为快)

  • 缓解压力otp_src_24.0.tar.gz

    tar -zxvf otp_src_24.0.tar.gz

  • 挪动部位

    mv otp_src_24.0 /usr/local/

  • 转换文件目录

    cd /usr/local/otp_src_24.0/

  • 建立将要安裝的文件目录

    mkdir ../erlang

  • 配备安装路径

    ./configure --prefix=/usr/local/erlang

    假如碰到以下不正确,无论

  • 安裝

    make && make install

  • 查询一下是不是安裝取得成功

    ll /usr/local/erlang/bin

  • 加上系统变量

    echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile

  • 更新系统变量

    source /etc/profile

  • 检测

    erl

  • 撤出

    键入halt().撤出

到此 erlang 安裝进行


二、安裝RabbitMQ
  • 免费下载

    wget https://GitHub.com/rabbitmq/rabbitmq-server/releases/download/v3.8.16/rabbitmq-server-generic-unix-3.8.16.tar.xz

  • 因为是tar.xz文件格式的因此必须采用xz,沒有得话就先安裝(可选)

    yum install -y xz

  • 第一次缓解压力

    /bin/xz -d rabbitmq-server-generic-unix-3.8.16.tar.xz

  • 第二次缓解压力

    tar -xvf rabbitmq-server-generic-unix-3.8.16.tar

  • 挪走

    mv rabbitmq_server-3.8.16/ /usr/local/

  • 更名

    cd /usr/local/
    mv /usr/local/rabbitmq_server-3.7.15 rabbitmq

  • 配备系统变量

    echo 'export PATH=$PATH:/usr/local/rabbitmq/sbin' >> /etc/profile

  • 更新系统变量

    source /etc/profile

  • 建立配备文件目录(未应用独立的环境变量,此流程能够无需)

    mkdir /etc/rabbitmq

  • 运行

    rabbitmq-server -detached

  • 终止

    rabbitmqctl stop

  • 情况

    rabbitmqctl status

  • 打开web软件

    rabbitmq-plugins enable rabbitmq_management

  • 浏览:15672端口号

http://127.0.0.1:15672/

默认设置账户密码:guest guest(这一账户只允许该设备浏览)

  • 查询全部客户

    rabbitmqctl list_users

  • 加上一个客户

    rabbitmqctl add_user lillcol 123456

  • 配备管理权限

    rabbitmqctl set_permissions -p "/" lillcol ".*" ".*" ".*"

  • 查询用户权限

    rabbitmqctl list_user_permissions lillcol

  • 设定tag

    rabbitmqctl set_user_tags lillcol administrator

  • 清理数据(安全起见,删掉默认设置客户)

    rabbitmqctl delete_user guest

  • 配备好客户以后重新启动一下rabbit,随后就可以用新账户开展登录


三、安裝python3.7.5

经检测,3.7.5一下版本号安装airflow全过程中会发生各种各样难题,因此必须安裝3.7.5,(3.7.5 没检测不清楚是否会出难题)

  • 安裝编译程序有关专用工具
yum -y groupinstall "Development Tools"
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
yum install libffi-devel -y
  • 下载安装包缓解压力

    wget https://www.python.org/FTP/python/3.7.5/Python-3.7.5.tar.xz

    tar -xvJf Python-3.7.5.tar.xz

  • 编译程序安裝python

    mkdir /usr/python3.7 #建立编译程序安装文件

    cd Python-3.7.5

    ./configure --prefix=/usr/python3.7 --enable-optimizations

    make && make install

  • 创建软连接

    ln -s /usr/python3.7/bin/python3 /usr/bin/python3.7

    ln -s /usr/python3.7/bin/pip3 /usr/bin/pip3.7

  • 认证是不是取得成功

    python3.7 -V

    pip3.7 -V

[root@DATACENTER04 bin]# python3.7 -V
Python 3.7.5
[root@DATACENTER04 bin]# pip3.7 -V

pip 19.2.3 from /usr/python3.7/lib/python3.7/site-packages/pip (python 3.7)
  • 升2026;pip3.7

    安装airflow pip版本过低会造成 不兼容

    pip3.7 install --upgrade pip==21.1.2
[root@DATACENTER04 bin]# pip3.7 install --upgrade pip==21.1.2
[root@DATACENTER04 bin]# pip3.7 -V
pip 21.1.2 from /usr/python3.7/lib/python3.7/site-packages/pip (python 3.7)
  • 安裝gunicorn

    pip3.7 install --upgrade pip==21.1.2
三、配备mysql

这里应用mysql开展元数据管理,规定mysql 5.7 之上版本号。

  • 建立airflow_db库
    CREATE DATABASE airflow_db CHARACTER SET UTF8米b3 COLLATE utf8_general_ci;

留意要用UTF8米b3,UTF8米b4在检测全过程中发生不正确

  • 改动管理权限
CREATE USER 'airflow' IDENTIFIED BY 'airflow123';
GRANT ALL PRIVILEGES ON airflow_db.* TO 'airflow';

安装airflow

一、安装airflow
  • 配备APPs sudo管理权限(root)

    给apps客户sudo管理权限,vi /etc/sudoers,,添加下边句子,不然安裝install的情况下很有可能会不成功
## Allow root to run any commands anywhere 
root	ALL=(ALL) 	ALL
apps    ALL=(ALL)                NOPASSWD: ALL #添加这一句
  • 配备airflow系统变量(root)

    安装完后airflow安装路径默认设置为:/home/apps/.local/bin,vi /etc/profile尾端添加以下內容:

    export PATH=$PATH:/usr/python3/bin:/home/apps/.local/bin

    source /etc/profile

这里的/home/apps/.local/bin 为~/.local/bin,

依据具体配备PATH=$PATH:~/.local/bin

  • 配备hosts(root),vi /etc/hosts,添加下边句子
199.232.68.133 raw.githubusercontent.com
  • 配备系统变量(apps)(可选,默认设置~/airflow)
export AIRFLOW_HOME=~/airflow
  • 配备版本信息(apps)
AIRFLOW_VERSION=2.0.2 # airflow版本号
PYTHON_VERSION="$(python3.7 --version | cut -d " " -f 2 | cut -d "." -f 1-2)" # python版本号
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt" # 管束url
  • 安装airlfow(apps)

    实行安裝指令,留意得加sudo,不然会出现一部分缺少,可是沒有出错
sudo pip3.7 install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}" --use-deprecated legacy-resolver  [-i https://pypi.douban.com/simple]
  • 假如上边的流程顺利实行,这时会出现airflow指令,而且会建立~/airflow,进到airflow文件目录以下

注:以上流程必须在全部安裝节点开展实际操作


二、配备airflow

再看一遍安裝整体规划

网络服务器 节点 服务项目
DATACENTER01 master1 webserver, scheduler,worker,rabbitmq(选配)
DATACENTER03 master2 webserver,scheduler
DATACENTER04 worker1 worker
DATACENTER05 worker2 worker

这时的构架以下




序列服务项目及元数据库查询(Metestore)的高可用性

序列服务项目选用RabbitMQ,早已安裝在DATACENTER01,能够根据布署高可用性完成序列的高可用性,(本实例沒有对序列做高可用性)

元数据库查询(Metestore) 高可用性
在于所应用的数据库查询,这里选用mysql。能够根据布署主从关系备份数据完成高可用性

  • 配备scheduler高可用性

    我们可以根据第三方部件 airflow-scheduler-failover-controller 完成 scheduler 的高可用性,安裝配备流程以下:
1. 免费下载failover
gitclone https://github.com/teamclairvoyant/airflow-scheduler-failover-controller
//网络不好有时下不出来,能够去找别的資源随后提交网络服务器安裝

2. 安裝failover
cd{AIRFLOW_FAILOVER_CONTROLLER_HOME}
sudo pip3.7 install -e . [-i https://pypi.douban.com/simple] 

3. 复位 failover
sudo pip3.7 install -e . [-i https://pypi.douban.com/simple] 
//复位 failover 会向${AIRFLOW_HOME}/airflow.cfg中增加內容

4. 变更${AIRFLOW_HOME}/airflow.cfg配备,4~7 流程以后的全部流程能够后边统一实际操作
scheduler_nodes_in_cluster= DATACENTER01,DATACENTER03

5. 配备DATACENTER01,DATACENTER03中间免密支付登录

6. 检测免密支付登录
scheduler_failover_controller test_connection  
scheduler_failover_controller get_current_host //获得当今的host,能够用以查询安裝状况

7. 运行failover
nohup scheduler_failover_controller start >/dev/null 2>&1 &
  1. failover必须在运作scheduler的网络服务器上布署,这里必须在DATACENTER01,DATACENTER03布署
  2. 免密支付登录配备1442;照Centos7下完成免登录密码
  • 配备{AIRFLOW_HOME}/airflow.cfg

    将一下內容配备进{AIRFLOW_HOME}/airflow.cfg
1.  executor 为 CeleryExecutor
# executor = LocalExecutor
executor = CeleryExecutor

2. 特定元数据库查询(metestore)
#sql_alchemy_conn = sqlite:////home/apps/airflow/airflow.db
sql_alchemy_conn = mysql pymysql://airflow:airflow123@10.0.0.1:3306/airflow_db

3. 设定broker,即消息队列,这里应用 RabbitMQ
# broker_url = redis://redis:6379/0
broker_url = amqp://lillcol:123456@DATACENTER01:5672/

4. 设置結果储存后端开发 backend
# result_backend = db postgresql://postgres:airflow@postgres/airflow
# 自然您还可以应用 Redis :celery_result_backend =redis://{REDIS_HOST}:6379/1
# celery_result_backend = db mysql://airflow:airflow123@10.0.0.1:3306/airflow_db 
# 留意这里要用result_backend,有一些blog应用celery_result_backend,可是在检测全过程中会无法识别
result_backend = db mysql://airflow:airflow123@10.0.0.1:3306/airflow_db

5. 配备scheduler_nodes_in_cluster容错机制节点
scheduler_nodes_in_cluster= DATACENTER01,DATACENTER03

6.改动时区时间 
# default_timezone = utc
default_timezone = Asia/Shanghai

7. 配备web端口(默认设置8080,由于已被占有这里改成8081)
endpoint_url = http://localhost:8081
base_url = http://localhost:8081
web_server_port = 8081

8. 关掉载入实例(可选)
# load_examples = True
load_examples = False

9. 电子邮件有关配备(可选)
[smtp]
smtp_host = mail.ndpmedia.com
smtp_starttls = True
smtp_ssl = False
smtp_user = user
smtp_password = pass
smtp_port = 25
smtp_timeout = 30
smtp_mail_from =与user同样
smtp_retry_limit = 5

将改动后的{AIRFLOW_HOME}/airflow.cfg同歩到全部安装airflow的网络服务器上


三、运行airflow群集
  • 复位数据库查询(apps@DATACENTER0):airflow db init

次流程会在mysql上建立有关元数据分析表

  • 建立客户(apps@DATACENTER01):
airflow users create \
    --username admin \
    --firstname Peter \
    --lastname Parker \
    --role Admin \
    --email spiderman@superhero.org
Password:123456
  • 运行webserver:
airflow webserver -D

次流程在DATACENTER01,DATACENTER03实行

  • 运行scheduler
#1. 必须先运行scheduler容错机制软件scheduler_failover_controller,
#   此流程在DATACENTER01,DATACENTER03实行
nohup scheduler_failover_controller start >/dev/null 2>&1 &

#2. 运行scheduler,次流程只必须在DATACENTER01实行
nohup airflow scheduler >/dev/null 2>&1 &

同一时间只有运行一个scheduler,一旦运作 scheduler xinetd的设备发生常见故障,马上运行另一台设备上的 scheduler 。

  • 运行worker
#1. 保证 必需手机软件早已安裝
sudo pip3.7 install pymysql
sudo pip3.7 install celery
sudo pip3.7 install flower
sudo pip3.7 install psycopg2-binary

#2. 先运行flower,在必须运行worker网络服务器实行,这里在DATACENTER01,DATACENTER04实行
airflow celery flower -D

#3. 运行worker,在必须运行worker网络服务器实行,这里在DATACENTER01,DATACENTER04实行
airflow celery worker -D

保证 worker的8793早已对外开放,WEB UI查询log的情况下没法载入有关日志


四、运行airflow群集
  • 登录web UI
# 由于在DATACENTER01、DATACENTER03运行了webserver,能够根据下边二选一开启WEB UI
http://DATACENTER01:8081
http://DATACENTER03:8081

账户:Admin 登陆密码:123456

登录后能够增加别的的客户

五、配备、实行dag

  • 配备dags

    airflow 的dags默认设置在{AIRFLOW_HOME}/dags

    每日任务根据scheduler生产调度,并根据worker实行

    因此在全部有运行scheduler和worker的网络服务器上面要有同样的dags与有关脚本制作

    即大家必须确保全部节点下的{AIRFLOW_HOME}/dags及其依靠的脚本制作是一致的

    假如不一致很有可能造成 2个結果:
  1. WEB UI中的dags与{AIRFLOW_HOME}/dags中不一致

在于当今scheduler上边的{AIRFLOW_HOME}/dags

  1. 每日任务实行不成功

在相匹配的woker上找不着实行的dag或有关脚本制作

例如现阶段scheduler 运作在DATACENTER03,这时{AIRFLOW_HOME}/dags以下:

[apps@DATACENTER03 dags]$ ll
total 40
-rw-r--r-- 1 apps dolphinscheduler 12513 May 28 15:14 DAG_**_D2.py
-rw-r--r-- 1 apps dolphinscheduler 12512 May 25 17:51 DAG_**_D.py
drwxr-xr-x 2 apps dolphinscheduler   132 Jun  4 18:03 __pycache__
-rw-r--r-- 1 apps dolphinscheduler  1381 Jun  4 16:43 TEST_RUN2.py
-rw-r--r-- 1 apps dolphinscheduler  1380 Jun  1 09:02 TEST_RUN.py

WEB UI以下:

  • 运行每日任务

  • 观察实行状况

执行任务的(woker)节点为:DATACENTER01

执行任务的(woker)节点为:DATACENTER04

因此大家务必确保全部节点的dags 与 依靠脚本制作同歩


处理错误

  • Specified key was too long
[apps@DATACENTER03 airflow]$ airflow db init
...
    raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1071, 'Specified key was too long; max key length is 3072 bytes')
[SQL: ALTER TABLE xcom ADD CONSTRAINT pk_xcom PRIMARY KEY (dag_id, task_id, `key`, execution_date)]

解决方案:

#建立airflow_db情况下特定编号
#CREATE DATABASE airflow_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE airflow_db CHARACTER SET UTF8米b3 COLLATE utf8_general_ci;

CREATE USER 'airflow' IDENTIFIED BY 'airflow123';
GRANT ALL PRIVILEGES ON airflow_db.* TO 'airflow';

  • explicit_defaults_for_timestamp 不正确
MySQL [(none)]> show global variables like '%timestamp%';
 --------------------------------- -------- 
| Variable_name                   | Value  |
 --------------------------------- -------- 
| explicit_defaults_for_timestamp | OFF    |
| log_timestamps                  | SYSTEM |
 --------------------------------- -------- 
2 rows in set (0.02 sec)

# 改动explicit_defaults_for_timestamp=1
MySQL [(none)]> set global explicit_defaults_for_timestamp =1;
Query OK, 0 rows affected (0.00 sec)

MySQL [(none)]> show global variables like '%timestamp%';
 --------------------------------- -------- 
| Variable_name                   | Value  |
 --------------------------------- -------- 
| explicit_defaults_for_timestamp | ON     |
| log_timestamps                  | SYSTEM |
 --------------------------------- -------- 

  • -bash: airflow: command not found

    安装完后沒有发生airflow指令及其有关构造,解决方案有两个
  1. 卸载掉apache-airflow,重装一次,指令以下:
sudo pip3.7 uninstall apache-airflow==2.0.2
pip3.7 install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}" --use-deprecated legacy-resolver
  1. 将~/.local/bin添加PATH ,(强烈推荐,在airflow安裝前配备)
PATH=$PATH:~/.local/bin

  • No module named 'airflow'
# 在运行webserver的情况下很有可能会发生下边的不正确,一样的解决方式
No module named 'airflow'
No module named 'airflow.www'
No module named 'airflow.www.gunicorn_config'
FileNotFoundError: [Errno 2] No such file or directory: 'gunicorn': 'gunicorn'

解决方案:

#建立/usr/python3.7/bin/gunicorn的导电软连接更换原先的gunicorn,
#很有可能在``/usr/python3/bin``或``/usr/bin``下,实际看情况实际操作
1. 删掉原先的导电软连接 
sudo rm -rf /usr/python3/bin/gunicorn
2. 建立新的导电软连接 
sudo ln -s /usr/python3.7/bin/gunicorn /usr/python3/bin

airflow webserver运作时,会启用subprocess.Popen建立子过程,webserver应用gunicorn

实行gunicorn运作时,很有可能是在PATH中找不着该指令出错

也可能是gunicorn的版本号过低造成 出错

现阶段的版本号最少是gunicorn (version 19.10.0)

  • ModuleNotFoundError: No module named 'MySQLdb'

    运行worker的情况下ModuleNotFoundError: No module named 'MySQLdb'

    解决方案安裝mysqlclient(python 3.7 要安裝mysqlclient):
sudo pip3.7 install mysqlclient

  • 没法载入worker端log

    airlfow日志默认设置储存在{AIRFLOW_PATH}/logs/{dag}/...下,

    这时在载入在web 端载入不上日志很有可能有二种状况
  1. 未对外开放worker的8793端口号,解决方案开放端口
  2. 此文件目录的的管理权限难题,对外开放{AIRFLOW_PATH}的管理权限就可以

  • 配备免密支付登录,可是实行scheduler_failover_controller test_connection的情况下或是必须输入支付密码

    免密支付配备难题,很有可能2个缘故:
  1. 管理权限难题

    SSHd为了更好地安全性,对属主的文件目录和文件权限有一定的规定。假如管理权限不对,则ssh的免登陆密码登录不起效。
    规定以下:
#客户文件目录管理权限为 755 或是 700,便是不可以是77x。
#.ssh文件目录管理权限一般为755或是700。
#rsa_id.pub 及authorized_keys管理权限一般为644
#rsa_id管理权限务必为600
将文件目录改为相匹配的管理权限就可以
  1. 服务器防火墙的难题

    关闭防火墙检测
systemctl status firewalld

参照文本文档:

官方网安裝文本文档

airflow 的安裝布署与填大坑


怎样布署一个健硕的 apache-airflow 智能监控系统

qianqu
( 千趣源码网全面的综合平台 )
ad
ad
ad
ad
千趣源码