摘要
airflow2.0.2分布式安裝文本文档 必须安裝的部件部件作用Airflow Webserver查看数据库以监管和实行DAGs的web页面。Airflow Scheduler它查验数据库数据库查询中的DAG和每日任务的情况,在必需时建立新每日任务,并将每日任务发送至序列。Airflow Metadata Database它包括DAG运作和每日任务案例的情况.Airflow Message B…
正文
airflow2.0.2分布式安裝文本文档
必须安裝的部件
部件 | 作用 |
---|---|
Airflow Webserver | 查看数据库以监管和实行DAGs的web页面。 |
Airflow Scheduler | 它查验数据库数据库查询中的DAG和每日任务的情况, 在必需时建立新每日任务,并将每日任务发送至序列。 |
Airflow Metadata Database | 它包括DAG运作和每日任务案例的情况. |
Airflow Message Broker | 它将在序列中储存要运作的每日任务指令。 |
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)
- 升級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 &
- failover必须在运作scheduler的网络服务器上布署,这里必须在DATACENTER01,DATACENTER03布署
- 免密支付登录配备参照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个結果:
- WEB UI中的dags与{AIRFLOW_HOME}/dags中不一致
在于当今scheduler上边的{AIRFLOW_HOME}/dags
- 每日任务实行不成功
在相匹配的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指令及其有关构造,解决方案有两个
- 卸载掉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
- 将~/.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 端载入不上日志很有可能有二种状况
- 未对外开放worker的8793端口号,解决方案开放端口
- 此文件目录的的管理权限难题,对外开放{AIRFLOW_PATH}的管理权限就可以
- 配备免密支付登录,可是实行
scheduler_failover_controller test_connection
的情况下或是必须输入支付密码免密支付配备难题,很有可能2个缘故:
- 管理权限难题
sshd为了更好地安全性,对属主的文件目录和文件权限有一定的规定。假如管理权限不对,则ssh的免登陆密码登录不起效。
规定以下:
#客户文件目录管理权限为 755 或是 700,便是不可以是77x。
#.ssh文件目录管理权限一般为755或是700。
#rsa_id.pub 及authorized_keys管理权限一般为644
#rsa_id管理权限务必为600
将文件目录改为相匹配的管理权限就可以
- 服务器防火墙的难题
关闭防火墙检测
systemctl status firewalld
参照文本文档:
官方网安裝文本文档
airflow 的安裝布署与填大坑
怎样布署一个健硕的 apache-airflow 智能监控系统
关注不迷路
扫码下方二维码,关注宇凡盒子公众号,免费获取最新技术内幕!
评论0