【原创】大数据基础之Airflow(2)生产环境部署airflow研究
一 官方
airflow官方分布式部署结构图

airflow进程
- webserver
- scheduler
- flower(非必须)
- worker
airflow缺点
- scheduler单点
- 通过在scheduler的dags目录变动dag文件来提交流程
官方分布式部署方案
- 多个webserver
- 多个worker
- CeleryExecutor(依赖redis或rabbitmq)
- MesosExecutor(依赖mesos)
第三方开源方案ASFC
针对scheduler单点问题,有第三方方案:https://github.com/teamclairvoyant/airflow-scheduler-failover-controller
The Airflow Scheduler Failover Controller (ASFC) is a mechanism that ensures that only one Scheduler instance is running in an Airflow Cluster at a time. This way you don't come across the issues we described in the "Motivation" section above.
You will first need to startup the ASFC on each of the instances you want the scheduler to be running on. When you start up multiple instances of the ASFC one of them takes on the Active state and the other takes on a Standby state. There is a heart beat mechanism setup to track if the Active ASFC is still active. If the Active ASFC misses multiple heart beats, the Standby ASFC becomes active.
The Active ASFC will poll every 10 seconds to see if the scheduler is running on the desired node. If it is not, the ASFC will try to restart the daemon. If the scheduler daemons still doesn't startup, the daemon is started on another node in the cluster.
Airflow Scheduler Failover Controller (ASFC),实现方式为:多个实例中只有一个处于active状态,处于active状态的实例会每10s检查一下scheduler进程是否存活并根据需要重启进程;
坏消息是该方案和airflow新版本1.10不兼容
二 基于mesos+hdfs的airflow生产环境部署方案研究
相同部分
和官方一致
- 使用mysql数据库作为元数据库
和官方不一致1
- 所有对dags目录的修改同步到hdfs上,保证dags目录的高可用
- 使用HDFS NFSGateway,将hdfs挂载到所有可能的scheduler节点上的,无论scheduler被部署在哪个节点上,都使用同一个dags目录
- 使用nginx+marathon-lb向外暴露airflow的webserver,可以操作流程或查看流程执行情况等
1 airflow单实例容器部署方案
和官方不一致2
- webserver、scheduler、worker作为docker容器运行,在多个节点上只部署一个实例,由marathon保证可用性,由marathon-lb做服务发现
- worker使用LocalExecutor,即所有的任务都使用子进程执行
- 为了使容器内的worker的LocalExecutor能够访问外部集群功能,一种可行的方式是将各种组件的父目录挂载到容器中(比如各个组件目录为/app/java、/app/hive、/app/spark、/app/hdfs,则挂载/app目录到容器内),然后所有的任务脚本一开始统一引入执行一个初始化环境变量的公共脚本,设置各种Home和Path,然后就可以在容器内使用各种组件的客户端,比如java、hive、spark、hdfs等
2 airflow分布式容器部署方案
和官方不一致2
- webserver和scheduler作为docker容器运行,在多个节点上只部署一个实例,由marathon保证可用性,由marathon-lb做服务发现
- worker使用MesosExecutor:
- 直接在mesos agent上执行airflow任务,好处是可以保证具体任务能够访问到集群的功能,比如impala/flink,缺点是需要在所有mesos agent节点的宿主机上部署airflow
- 在mesos agent上部署airflow worker的docker容器,然后在容器中执行airflow任务,好处是部署0成本,缺点是docker容器内只包含worker,不能使用外部集群的功能,不过这个缺点可以使用上一方案中LocalExecutor相同的方式解决
airflow docker image:https://github.com/puckel/docker-airflow
【原创】大数据基础之Airflow(2)生产环境部署airflow研究的更多相关文章
- 【原创】大数据基础之Zookeeper(2)源代码解析
核心枚举 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING; } zookeeper服务器状态:刚启动LOOKING,f ...
- 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)
引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...
- 大数据学习(19)—— Flume环境搭建
系统要求 Java1.8或以上 内存要足够大 硬盘足够大 Agent对源和目的要有读写权限 Flume部署 我这8G内存的电脑之前搭建Hadoop.Hive和HBase已经苟延残喘了,怀疑会卡死,硬着 ...
- Django + Uwsgi + Nginx 的生产环境部署
使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...
- 深度学习Tensorflow生产环境部署(上·环境准备篇)
最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...
- 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置
第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本 uwsgi- ...
- 第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置
第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置 1.Linux安装配置 注意事项: 虚拟机网卡桥接模式 不要拨VPN 如果,网络怎么都 ...
- HyperLedger Fabric 1.4 kafka生产环境部署(11.1)
11.1 Kafka模式简介 上一章介绍的Solo模式只存在一个排序(orderer)服务,是一种中心化结构,一旦排序(orderer)服务出现了问题,整个区块链网络将会崩溃,为了能在正式 ...
- 10: Django + Uwsgi + Nginx 的生产环境部署
1.1 一些重要概念 1.Web协议介绍 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi 1. CGI: 最早的协议 2. FCGI: 比CGI快 ...
随机推荐
- python中print和input的底层实现
print print的底层通过sys.stdout.write() 实现 import sys print('hello') print('world') print(520) sys.stdout ...
- Filter Authentication 登录认证
[编程式配置]可用webxml配置替换@WebListenerpublic class FilterListenerConfigurator implements ServletContextList ...
- 【BZOJ】2286: [Sdoi2011]消耗战 虚树+DP
[题意]给定n个点的带边权树,每次询问给定ki个特殊点,求隔离点1和特殊点的最小代价.n<=250000,Σki<=500000. [算法]虚树+DP [题解]考虑普通树上的dp,设f[x ...
- Ubuntu安装MongoDB
一.下载安装 首先,更新软件包列表以获取最新版本的存储库列表: sudo apt update 2.接着安装MongoDB包本身: sudo apt install -y mongodb ×加-y是为 ...
- python之实现循环查看指定路径下的所有文件---os.walk
循环查看指定路径下的所有文件.文件夹,包含隐藏文件注:“.filename” 以点开头的是隐藏文件 import os for cur_path,cur_dirs,cur_files in os.wa ...
- Luogu P2490「JSOI2016」黑白棋
我博弈基础好差.. Luogu P2490 题意 有一个长度为$ n$的棋盘,黑白相间的放$ k$个棋子,保证$ k$是偶数且最左边为白子 每次小$ A$可以移动不超过$ d$个白子,然后小$ B$可 ...
- chrome调试技巧和插件介绍
14 个你可能不知道的 JavaScript 调试技巧 五种前端开发必备的调试技术 日志的艺术 吐血推荐珍藏的Chrome插件 吐血推荐珍藏的 Chrome 插件(二)
- jsonp实现下拉搜索
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Maven SSH三大框架整合的加载流程
<Maven精品教程视频\day02视频\03ssh配置文件加载过程.avi;> 此课程中讲 SSH三大框架整合的加载流程,还可以,初步接触的朋友可以听一听. < \day02视频\ ...
- 20165234 《Java程序设计》第五周学习总结
第五周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类 内部类:在一个类中定义另一个类. 外嵌类:包含内部类的类,称为内部类的外嵌类. 内部类的类体中不能声明类变量和类方法.外嵌类的类体中可 ...