airflow 安装配置

airflow 相关软件安装

python 3.6.5 安装

安装依赖程序 ;

[root@node01 ~]# yum -y install zlib zlib-devel bzip2 bzip2-devel ncurses ncurses-devel readline readline-devel openssl openssl-devel openssl-static xz lzma xz-devel sqlite sqlite-devel gdbm gdbm-devel tk tk-devel gcc

[root@node01 ~]# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

解压Python源码压缩包 ;

[root@node01 ~]# tar -zxvf Python-3.6.5.tgz

[root@node01 ~]# cd Python-3.6.5

安装python ;

[root@node01 Python-3.6.5]# ./configure prefix=/usr/local/python3

[root@node01 Python-3.6.5]# make

[root@node01 Python-3.6.5]# make install

[root@node01 Python-3.6.5]# mv /usr/bin/python /usr/bin/python2 #将原来的执行脚本改名备份

[root@node01 Python-3.6.5]# ln -s /usr/local/python3/bin/python3 /usr/bin/python #将新的python执行脚本链接到命令路径内

[root@node01 Python-3.6.5]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip #将pip3链接到命令路径内

查看版本信息 ;

修改yum相关配置文件 ;

将以下两个文件的开头 #!/usr/bin/python 改成 #!/usr/bin/python2.7

[root@node01 Python-3.6.5]# vim /usr/bin/yum

[root@node01 Python-3.6.5]# vim /usr/libexec/urlgrabber-ext-down

pip3 安装

默认python 3.6.5 已经自带pip3 ,不需要再额外进行安装。

如果是python2.x 就需要进行安装pip 。

MySQL 5.7.28 安装

解压MySQL软件(文件大小六百多兆,官网直接下载免安装)

[root@node01 ~]# tar zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

[root@node01 ~]# mv mysql-5.7.28-linux-glibc2.12-x86_64 /opt/mysql

[root@node01 ~]# cd /opt/mysql/

创建MySQL运行需要的用户跟组

[root@node01 mysql]# groupadd mysql

[root@node01 mysql]# useradd -M -s /sbin/nologin -g mysql mysql

创建存放数据的目录

[root@node01 mysql]# mkdir data

[root@node01 mysql]# chown -R mysql:mysql *

编写配置文件

vim /etc/my.cnf

[client]

port = 3306

socket = /opt/mysql/data/mysql.sock

[mysqld]

port = 3306

socket = /opt/mysql/data/mysql.sock

basedir = /opt/mysql

datadir = /opt/mysql/data

user = mysql

bind-address = 0.0.0.0

server-id = 1

init-connect = 'SET NAMES utf8'

character-set-server = utf8

初始化数据库

[root@node01 mysql]# bin/mysqld --initialize --basedir=/opt/mysql --datadir=/opt/mysql/data --user=mysql

将数据库添加到服务内

[root@node01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld

[root@node01 mysql]# cp /opt/mysql/bin/* /usr/sbin/

[root@node01 mysql]# chmod +x /etc/init.d/mysqld

添加开机自启

[root@node01 mysql]# chkconfig --add mysqld

[root@node01 mysql]# service mysqld start

登陆 MySQL, 密码在之前初始化时有提示的

[root@mysql_node01 mysql]# mysql -uroot -p

修改root密码,否则什么都做不了

mysql> alter user root@"localhost" identified by "123456";

Query OK, 0 rows affected (0.00 sec)

测试账号是否可以增删

mysql> create database abctest;

Query OK, 1 row affected (0.00 sec)

mysql> use abctest;

Database changed

mysql> drop database abctest;

Query OK, 0 rows affected (0.00 sec)

> 12. 授权airflow用户可被访问 ;

```bash

mysql> grant all on *.* to 'airflow'@'%' identified by '123456a';

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

创建airflow 要用的数据库,库名 airflow ;

mysql> create database airflow ;

Query OK, 1 row affected (0.00 sec)

开启timestamp ,数据更新时添加上当前时间 ;

mysql> set @@global.explicit_defaults_for_timestamp=on;

Query OK, 0 rows affected (0.00 sec)

redis 安装

解压redis (如需下载请直接到官网进行下载);

[root@node01 ~]# tar zxvf redis-5.0.0.tar.gz

[root@node01 ~]# cd redis-5.0.0/

安装redis ;

[root@node01 redis-5.0.0]# make && make test

[root@node01 redis-5.0.0]# mkdir /usr/local/redis #创建redis运行的目录

[root@node01 redis-5.0.0]# cp redis.conf /usr/local/redis/ #复制配置文件到redis运行目录

[root@node01 redis-5.0.0]# cp src/redis-server /usr/sbin/ #复制redis-server程序

[root@node01 redis-5.0.0]# cp src/redis-cli /usr/sbin/ #复制redis-cli程序

[root@node01 redis-5.0.0]# cp src/redis-sentinel /usr/sbin/ #复制redis-sentinel 程序

编辑redis 配置文件

[root@node01 redis-5.0.0]# vim /usr/local/redis/redis.conf

bind 0.0.0.0 #对外的绑定地址

daemonize yes #守护进程

pidfile /usr/local/redis/redis_6379.pid #指定pid

logfile "/usr/local/redis/redis.log" #指定log

dir "/usr/local/redis" #指定家目录

appendonly yes #开启持久化

启动redis ;

[root@node01 redis-5.0.0]# redis-server /usr/local/redis/redis.conf

连接redis 进行测试

[root@node01 ~]# redis-cli

127.0.0.1:6379> keys *

(empty list or set)

RabbitMQ 安装

安装rabbitmq跟erlang (程序直接到官网下载即可);

[root@node01 ~]# yum localinstall erlang-20.3-1.el7.centos.x86_64.rpm rabbitmq-server-3.7.5-1.el7.noarch.rpm -y

拷贝配置文件模板,然后修改配置文件(开启默认登录用户);

[root@node01 ~]# cp /usr/share/doc/rabbitmq-server-3.7.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

[root@node01 ~]# vim /etc/rabbitmq/rabbitmq.config

开启管理插件,启动程序 ;

[root@node01 ~]# rabbitmq-plugins enable rabbitmq_management #开启管理插件

[root@node01 ~]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie #设置cookie 文件权限(否则无法启动)

[root@node01 ~]# systemctl start rabbitmq-server.service #启动rabbitmq

[root@node01 ~]# systemctl enable rabbitmq-server.service #添加开机自启

打开管理页面 http://ip:15672 ,使用默认用户guest ,密码guest 进入 ;

点击admin -->> add a user ,添加用户密码并设置administrator 权限 ;

为admin用户添加 虚拟目录 / ;

单击用户admin

选择对应的Virtual Host ,单击 Set permission 进行设置 ;

重新查看,发现已经设置成功 ;

airflow 单节点部署

将所有守护进程运行在同一台机器上即可完成 airflow 的单结点部署,架构如下图所示

架构图

步骤

安装依赖( airflow[mysql] 需要用到 );

[root@node01 ~]# yum install mariadb-devel MySQL-python -y

[root@node01 ~]# mkdir /usr/local/mysql #创建目录

[root@node01 ~]# find / -name mysql.h #查看mysql.h 发现有两个,因为node01有安装MySQL,所以有两个文件,在安装airflow[mysql]时会调用/usr/local/mysql/include/mysql.h 文件

/usr/include/mysql/mysql.h

/opt/mysql/include/mysql.h

[root@node01 ~]# ln -s /opt/mysql /usr/local/mysql # 将MySQL安装目录链接到/usr/local/mysql

[root@node01 airflow]# ln -s /opt/mysql/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20

> 2. 添加环境变量

vim /etc/profile

export PATH=$PATH:/usr/local/python3/bin/

export AIRFLOW_HOME=~/airflow

> 3. 安装airflow 及相关应用 ;

[root@node01 ~]# pip install --upgrade pip #更新pip

[root@node01 ~]# pip install --upgrade setuptools #更新setuptools

[root@node01 ~]# pip install apache-airflow #安装airflow 主程序

[root@node01 ~]# pip install apache-airflow[mysql] #安装mysql连接器

[root@node01 ~]# pip install apache-airflow[celery] #安装celery 连接器

[root@node01 ~]# pip install redis #安装redis连接器

[root@node01 ~]# pip install --upgrade kombu #更新kombu (celery 需要最新的版本)

> 4. 初始化airflow 数据库 ;

[root@node01 ~]# airflow initdb #或者可以只使用airflow 命令加载配置文件

> 5. 初始化完之后会产生airflow相关的一些文件,查看airflow目录的内容 ;

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191227093123311.png)

> 6. 修改配置文件 ;

vim /root/airflow/airflow.cfg

时区设置

default_timezone = Asia/Shanghai

不加载案例

load_examples = False

执行webserver默认启动端口

web_server_port = 8080

使用的执行器

executor = CeleryExecutor

设置消息的中间代理

broker_url = redis://192.168.255.16:6379/0

设定结果存储后端 backend

当然也可以使用 Redis :result_backend =redis://redis:Kingsoftcom_123@172.19.131.108:6379/1

result_backend = db+mysql://airflow:123456a@192.168.255.16:3306/airflow

数据库连接

sql_alchemy_conn = mysql://airflow:123456a@192.168.255.16:3306/airflow

> 7. 开启timestamp ,数据更新时添加上当前时间 ;

mysql -uairflow -p

mysql> set @@global.explicit_defaults_for_timestamp=on;

Query OK, 0 rows affected (0.00 sec)

> 8. 重新生成数据库文件 ;

airflow initdb

> 9. 启动

[root@node01 airflow]# airflow webserver -p 8080 -D

[root@node01 airflow]# airflow scheduler -D

[root@node01 airflow]# airflow flower -D

[root@node01 airflow]# airflow worker -D #默认启动会报错,因为worker不允许被ROOT用户启动

> 10. 设置worker 可以被root用户启动

> 在 /etc/profile 文件内添加 export C_FORCE_ROOT=True 内容 ,source /etc/profile 重新加载即可

> 11. 查看单节点是否已经搭建好

> 分别打开http://192.168.255.11:8080 跟 http://192.168.255.11:5050 查看是否ok

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191227093149183.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dxajU0MDgyMTYx,size_16,color_FFFFFF,t_70)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191227093156143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dxajU0MDgyMTYx,size_16,color_FFFFFF,t_70)

### airflow 多节点(集群)部署

>   在稳定性要求较高的场景,如金融交易系统中,一般采用集群、高可用的方式来部署。Apache Airflow 同样支持集群、高可用的部署,airflow 的守护进程可分布在多台机器上运行,架构如下图所示:

#### 架构图

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191227093258334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dxajU0MDgyMTYx,size_16,color_FFFFFF,t_70)

##### 多节点好处

> 高可用

>   如果一个 worker 节点崩溃或离线时,集群仍可以被控制的,其他 worker 节点的任务仍会被执行。

> 分布式

>   处理如果你的工作流中有一些内存密集型的任务,任务最好是分布在多台机器上运行以便得到更快的执行。

#### 扩展 worker 节点

##### 水平扩展

>   你可以通过向集群中添加更多 worker 节点来水平地扩展集群,并使这些新节点指向同一个元数据库,从而分发处理过程。由于 worker 不需要在任何守护进程注册即可执行任务,因此所以 worker 节点可以在不停机,不重启服务下的情况进行扩展,也就是说可以随时扩展。

##### 垂直扩展

>   你可以通过增加单个 worker 节点的守护进程数来垂直扩展集群。可以通过修改 airflow 的配置文件-{AIRFLOW_HOME}/airflow.cfg 中 celeryd_concurrency 的值来实现,例如:

celeryd_concurrency = 30

> 您可以根据实际情况,如集群上运行的任务性质,CPU 的内核数量等,增加并发进程的数量以满足实际需求。

#### 扩展 Master 节点(高可用)

>   您还可以向集群中添加更多主节点,以扩展主节点上运行的服务。您可以扩展 webserver 守护进程,以防止太多的 HTTP 请求出现在一台机器上,或者您想为 webserver 的服务提供更高的可用性。需要注意的一点是,每次只能运行一个 scheduler 守护进程。如果您有多个 scheduler 运行,那么就有可能一个任务被执行多次。这可能会导致您的工作流因重复运行而出现一些问题。

>   下图为扩展 Master 节点的架构图:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191227093318702.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dxajU0MDgyMTYx,size_16,color_FFFFFF,t_70)

>   看到这里,可能有人会问,scheduler 不能同时运行两个,那么运行 scheduler 的节点一旦出了问题,任务不就完全不运行了吗?

>

>   答案: 这是个非常好的问题,不过已经有解决方案了,我们可以在两台机器上部署 scheduler ,只运行一台机器上的 scheduler 守护进程 ,一旦运行 scheduler 守护进程的机器出现故障,立刻启动另一台机器上的 scheduler 即可。我们可以借助第三方组件 airflow-scheduler-failover-controller 实现 scheduler 的高可用。

>

>   两台master 都安装并运行 failover ,这样才能实现真正的高可用

> 具体步骤如下所示:

> 1. 下载 failover

> 2. 使用 pip 进行安装

cd airflow-scheduler-failover-controller

pip install -e .

> 3. 初始化 failover

scheduler_failover_controller init

> 注:初始化时,会向airflow.cfg中追加内容,因此需要先安装 airflow 并初始化。

> 4. 更改 failover 配置

scheduler_nodes_in_cluster= host1,host2

> 注:host name 可以通过scheduler_failover_controller get_current_host命令获得

> 5. 配置安装 failover 的机器之间的免密登录,配置完成后,可以使用如下命令进行验证:

scheduler_failover_controller test_connection

> 6. 启动 failover

scheduler_failover_controller start

> 注意:在failover 监控scheduler 时会出现无法启动的情况,此时应该修改 /root/airflow/airflow.cfg 的

airflow_scheduler_start_command = export AIRFLOW_HOME=/root/airflow;;nohup airflow scheduler >> ~/airflow/logs/scheduler.logs &

改为 airflow_scheduler_start_command = airflow scheduler -D

> 因此更健壮的架构图如下所示:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191227093337590.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dxajU0MDgyMTYx,size_16,color_FFFFFF,t_70)

##### 队列服务及元数据库(Metestore)的高可用。

> 队列服务取决于使用的消息队列是否可以高用可部署,如 RabbitMQ 和 Redis。

>   RabbitMQ 集群并配置Mirrored模式见:http://blog.csdn.net/u010353408/article/details/77964190

> 元数据库(Metestore) 取决于所使用的数据库,如 Mysql 等。

>   Mysql 做主从备份见:http://blog.csdn.net/u010353408/article/details/77964157

#### airflow 集群部署的具体步骤

##### 前提条件

> 节点运行的守护进程如下:

* master1 运行: webserver, scheduler

* master2运行:webserver

* worker1运行:worker

* worker2运行:worker

> 队列服务处于运行中. (RabbitMQ, Redis, etc)

* 安装 RabbitMQ 方法参见: http://site.clairvoyantsoft.com/installing-rabbitmq/

* 如果正在使用 RabbitMQ, 推荐 RabbitMQ 也做成高可用的集群部署,并为 RabbitMQ 实例配置负载均衡。

##### 步骤

> 1、 在所有需要运行守护进程的机器上安装 Apache Airflow。

> 2、修改 {AIRFLOW_HOME}/airflow.cfg 文件,确保所有机器使用同一份配置文件。

> 1. 修改 Executor 为 CeleryExecutor

executor = CeleryExecutor

> 2. 指定元数据库(metestore)

sql_alchemy_conn = mysql://{USERNAME}:{PASSWORD}@{MYSQL_HOST}:3306/airflow

> 3. 设置中间人(broker)

>   如果使用 RabbitMQ

broker_url = amqp://guest:guest@{RABBITMQ_HOST}:5672/

>   如果使用 Redis

broker_url = redis://{REDIS_HOST}:6379/0 #使用数据库 0

> 4. 设定结果存储后端 backend

celery_result_backend = db+mysql://{USERNAME}:{PASSWORD}@{MYSQL_HOST}:3306/airflow

#当然您也可以使用 Redis :celery_result_backend =redis://{REDIS_HOST}:6379/1

> 3、在 master1 和 master2 上部署您的工作流(DAGs)。

> 4、在 master 1,初始 airflow 的元数据库

$ airflow initdb

> 5、在 master1, 启动相应的守护进程

$ airflow webserver

$ airflow scheduler

> 6、在 master2,启动 Web Server

$ airflow webserver

> 7、在 worker1 和 worker2 启动 worker

$ airflow worker

> 8、使用负载均衡处理 webserver

> 可以使用 nginx,AWS 等服务器处理 webserver 的负载均衡,所有均已集群或高可用部署,apache-airflow 系统已坚不可摧。

airflow mysql_AirFlow 安装配置相关推荐

  1. Airflow的安装:在线安装、离线安装、问题汇总

    Airflow的安装:在线安装.离线安装.常见问题汇总 文章目录 Airflow的安装:在线安装.离线安装.常见问题汇总 前言 理想的安装过程 安装总结 实际的安装过程 python的安装 步骤1:获 ...

  2. python airflow_1.airflow的安装

    官方文档文档: http://airflow.incubator.apache.org/project.html 1.环境准备 1.1 安装环境 centos 6.7 (docker) python ...

  3. 1.airflow的安装

    1.环境准备 1.1 安装环境 1.2 创建用户 2.安装airflow 2.1 安装python 2.2 安装pip 2.3 安装数据库 2.4 安装airflow 2.4.1 安装主模块 2.4. ...

  4. mysql64如何配置_win7 64位下如何安装配置mysql-winx64(安装记录)

    win7 64位下如何安装配置mysql winx64 1.mysql下载 官方网站下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5. ...

  5. ActiveMQ—安装配置及使用

    安装配置及使用 转自:http://blog.csdn.net/qq_21033663/article/details/52461543 (一)ActiveMQ介绍 ActiveMQ 是Apache出 ...

  6. Linux下Tomcat的安装配置

    Linux下Tomcat的安装配置 一.下载安装对应的jdk,并配置Java环境. 官网下载地址: http://www.oracle.com/technetwork/java/javase/down ...

  7. wamp的mysql单独使用_Windows 7+8.1+10 单独安装配置 PHP+Apache+MySQL(不使用 WAMP)

    Windows 8.1 单独安装配置 PHP+Apache+MySQL(不使用 WAMP) 本文同样适用于Windows7和10 0x00 PHP [下载]http://www.doczj.com/d ...

  8. mysql数据库解压安装教程_MySQL数据库之windows 10下解压版MySql安装配置方法教程...

    本文主要向大家介绍了MySQL数据库之windows 10下解压版MySql安装配置方法教程 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. windows 10 下安装解压版的 ...

  9. python3.6.2怎样安装,python 3.6.2 安装配置方法图文教程

    python 3.6.2 安装配置方法图文教程 Windows下Python(pip)环境搭建(3.6)图解,供大家参考,具体内容如下 1.下载最新的Python安装:3.6.2 2.安装时不要选择默 ...

最新文章

  1. 供给侧改革与去产能对安防产业啥影响
  2. Android--表格布局
  3. Spring Boot:自定义starter
  4. hdu4847 水题
  5. 2018推荐的android手机,外媒推荐:2018年下半年最值得期待的5款安卓手机
  6. 从ASP.NET的PHP执行速度比较谈起
  7. 一些OEM的厂商的漏洞分析
  8. Fortran批量输出ctl文件格式
  9. 考研要求过英语四六级!这些大学有明确规定!
  10. SpringMVC 学谈 (第四章)
  11. python训练营 朋友圈点赞_python3 爬虫学习:自动给你心上人的微博点赞(三)
  12. Linux在sudo apt-get update或install时出现archive.ubuntu.com连接失败 [IP: 91.189.91.39 80]的错误解决方案
  13. 14宽的键槽深度多少_平键和键槽标准尺寸规格表.doc
  14. 市场调研报告-全球与中国AI加速器的渗透和路线市场现状及未来发展趋势
  15. 7-2 海盗分赃 (25 分)(PTA)
  16. 磁场强度和磁感应强度区别
  17. 云深处科技推出国内首款IP66工业级防水机器狗“绝影X20”
  18. JS 生成uuid(v4)
  19. 2013,GECCO,Running programs backwards: instruction inversion for effective search in semantic spaces
  20. 秒数转换成多少天/多少小时/多少分

热门文章

  1. 自适应分辨率的大屏的工具推荐
  2. 时刻沟通、呵护孩子的安全,这款儿童手表不容错过
  3. java image 设置大小_java – Bufferedimage调整大小
  4. MIUI12设置勿扰模式下来电白名单步骤
  5. inspect python模块_python常用模块-inspect模块
  6. 百度移动生态“头部效应”正在形成
  7. VRB亚太区启动大典盛大举行,开启财富管理全新时代
  8. 【概率论基础进阶】随机变量及其分布-随机变量及其分布函数
  9. linux 下fcitx 配置google pinyin和搜狗拼音
  10. 做生意只做自己熟悉的领域,挣钱只挣自己认知以内的钱