调度系统Airflow1.10.4调研与介绍和docker安装

Airflow1.10.4介绍与安装

现在是9102年,8月中旬。airflow当前版本是1.10.4.

随着公司调度任务增大,原有的,基于crontab和mysql的任务调度方案已经不太合适了,需要寻找一个可以支持分布式扩容的调度系统解决方案。

最初瞄准azkaban来着,想着基于这个的二次开发。对比功能和社区热度之后,Airflow比较符合我们寻找的调度系统。

什么是Airflow

Airflow是一个以编程方式创作,安排和监控工作流程的平台。对比crontab来看,它是一个可以定时调度任务的系统,只不过,airflow的调度更容易管理。

  • airflow支持任务依赖pipeline, 这是crontab以及quartz所不支持的。
  • airflow调度系统和业务系统解耦。业务单独编写流程,支持任务热加载。
  • airflow支持crontab定时格式
  • airflow通过Python来定义task,可以实现复杂的逻辑,支持分支条件等
  • airflow有一套完整的UI和管理系统
  • airflow有强大的插件扩展方式,各种插件很丰富,很容易二次开发,添加新功能
  • airflow是分布式设计,支持水平扩容
  • airflow支持task实例,并支持数据业务日期bizdate, 也叫 execution_date.
  • airflow支持任务补录backfill
  • airflow支持任务之间数据传递(这个任务依赖于上个任务的变量)
  • airflow支持序列执行(这个周期的任务依赖于上一个周期的执行结果是否成功)

Airflow 于 2014 年 10 月由 Airbnb 的 Maxime Beauchemin 开始。它是第一次提交的开源,并在 2015 年 6 月宣布正式加入 Airbnb Github。

该项目于 2016 年 3 月加入了 Apache Software Foundation 的孵化计划。

关于airflow具体使用细节,后面再详细介绍,这里就是一些在调度系统选型过程中查找的资料。

阿里基于airflow二次开发了调度平台Maat:

有赞基于airflow二次开发了大数据任务调度平台:

Google cloud提供了基于airflow的数据分析产品:

微软Azure支持airflow的运行:

当然,这些云厂商很可能是为了让你使用他们的数据产品,比如对象存储,lambda等。

社区异常活跃,star破万,更新频繁, Apache背书。据说作者早期在Facebook搞过一套调度系统,到airbnb就开源了airflow。大公司背书。

slack群组也很活跃

虽然是Python开发的,我也没玩过Python web, 但调研结果就是: 用Airflow吧。

Airflow的安装

官方文档有非常详细的安装教程。这里不再赘述。

想要记录的是基于docker安装airflow,以及做了一些特定的修改。

最终docker镜像为: https://github.com/Ryan-Miao/docker-airflow

使用方式很简单:

  1. clone 项目
  2. 构建airflow镜像
make build
  1. 启动
docker-compose -f docker-compose-CeleryExecutor.yml up -d
  1. 浏览器访问localhost:8089可以查看dag

  1. 浏览器访问localhost:5555可以查看worker

扩容3个worker

docker-compose -f docker-compose-CeleryExecutor.yml scale worker=3

所做的一些修改

修改时区为utc+8

Docker容器的时区

ENV LANGUAGE zh_CN.UTF-8
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
ENV LC_CTYPE zh_CN.UTF-8
ENV LC_MESSAGES zh_CN.UTF-8

sed -i 's/^# zh_CN.UTF-8 UTF-8$/zh_CN.UTF-8 UTF-8/g' /etc/locale.gen     && locale-gen
/bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

web server ui显示的时区,以及任务运行时的ds等时区:

参考https://blog.csdn.net/Crazy__Hope/article/details/83688986,

airflow.cfg

default_timezone = Asia/Shanghai

/usr/local/lib/python3.7/site-packages/airflow/utils/timezone.py

在 utc = pendulum.timezone(‘UTC’) 这行(第27行)代码下添加,

from airflow import configuration as conf
try:
    tz = conf.get("core", "default_timezone")
    if tz == "system":
        utc = pendulum.local_timezone()
    else:
        utc = pendulum.timezone(tz)
except Exception:
    pass

修改utcnow()函数 (在第69行)

原代码 d = dt.datetime.utcnow()
修改为 d = dt.datetime.now()

/usr/local/lib/python3.7/site-packages/airflow/utils/sqlalchemy.py

在utc = pendulum.timezone(‘UTC’) 这行(第37行)代码下添加

from airflow import configuration as conf
try:
    tz = conf.get("core", "default_timezone")
    if tz == "system":
        utc = pendulum.local_timezone()
    else:
        utc = pendulum.timezone(tz)
except Exception:
    pass

/usr/local/lib/python3.7/site-packages/airflow/www/templates/admin/master.html

把代码 var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000);
改为 var UTCseconds = x.getTime();

把代码 "timeFormat":"H:i:s %UTC%",
改为  "timeFormat":"H:i:s",

webserver查看日志,中文乱码问题

容器编码设置没问题,进去看日志文件也没问题,但是webserver查看的时候日志中文乱码。原因是http请求的mime
没设置编码。

/usr/local/lib/python3.7/site-packages/airflow/bin/cli.py
修改mime

mimetype="application/json;charset=utf-8",

Hive beeline认证

airflow支持beeline, 在connection里填写beeline的配置后,使用HiveOperator进行hive操作。我们的hive
没有使用kerberos, 而是ldap的账号密码认证。需要对后台的hvie任务做认证的修改。

修改hive_hooks.py的认证部分即可。Dockerfile注释掉的部分就是。

添加hive的支持

github的airflow docker没有hive相关的lib。我在Dockerfile里添加了hive的环境,这个后面再做优化,针对
不同的pool,安装不同的依赖。

ldap配置

参见https://www.cnblogs.com/woshimrf/p/ldap.html 配置我们的ldap服务。

然后修改airflow.cfg. 找到263行

authenticate = False
# 设置为True并打开ldap即可使用ldap配置
# auth_backend = airflow.contrib.auth.backends.ldap_auth

以及518行

[ldap]
# set this to ldaps://<your.ldap.server>:<port>
uri = ldap://192.168.2.2:389
user_filter = objectClass=inetOrgPerson
user_name_attr = sn
group_member_attr = memberOf
superuser_filter = memberOf=cn=g-admin,ou=group,dc=demo,dc=com
data_profiler_filter = memberOf=cn=g-users,ou=group,dc=demo,dc=com
bind_user = cn=admin,dc=demo,dc=com
bind_password = admin
basedn = dc=demo,dc=com
cacert =
search_scope = SUBTREE

参考

原文地址:https://www.cnblogs.com/woshimrf/p/airflow-install-with-docker.html

时间: 2024-07-29 14:56:26

调度系统Airflow1.10.4调研与介绍和docker安装的相关文章

Hadoop 开源调度系统zeus(二)

紧跟之前Hadoop 开源调度系统zeus(一) 本节主要介绍一下zeus的架构: 先给一个zeus的架构图 无论Master还是Worker都有一套WEB UI,无论从哪个上面去看,看到的结果都是一样的,实际上一般仅仅看主 Master:调度内核,在启动时启动一个TCP服务,同一时候将全部任务读到内存中,在任务能够运行时,加到运行队列,下发到client Worker:启动后连接Master,并定时向Master发送心跳,当收到Master的任务后,封装任务运行shell,并将任务运行结果通知

开源分布式Job系统,调度与业务分离-HttpJob.Agent组件介绍以及如何使用

项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立更新Hangfire版本不影响! 该组件已被Hangfire官方采纳,在Hangfire官网可以查到: 开源地址: https://github.com/yuzd/Hangfire.HttpJob 该项目目的是: 剥离Job调度和业务 共有三篇文章 开源分布式Job系统,调度与业务分离-如何创建周期

世界杯百T级CDN智能流量调度系统的实战分享

摘要: 在刚刚落幕的重庆云栖上,阿里云高级技术专家仔晟为现场观众带来议题<百T级CDN智能流量调度系统的实战分享>,重点介绍了在世界杯直播业务场景之下,阿里云CDN的产品架构.技术方案与客户实践. 在刚刚落幕的重庆云栖上,阿里云高级技术专家曾福华为现场观众带来议题<百T级CDN智能流量调度系统的实战分享>,重点介绍了在世界杯直播业务场景之下,阿里云CDN的产品架构.技术方案与客户实践. 曾福华老师的分享从CDN系统相关介绍.智能调度产品.世界杯场景优化三个方面展开. CDN系统相关

黑马程序员-java-银行业务调度系统《十一》

                   --Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- 1.了解银行业务调度系统的工作流程与原理 银行里有三种窗口,一种是普通窗口,一种是VIP窗口,一种是快速窗口,所有客户都要领号排队,当VIP窗口或快速窗口空闲时,可以为普通窗口服务. 2.银行业务调度系统的项目需求 · 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. · 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理

电梯调度系统(界面由C图形库编绘)

电梯调度系统编程 1.编程题目 电梯调度. 2.结对编程组员 黄冠译,刘畅. 3.编程语言 C语言图形库. 4.题目要求: 5.代码运行及结果调试: ① 运行界面为C++图形库支持,开始运行的初始界面如图,且默认所有电梯初始状态都为1楼,此时不分奇偶层: ② 我设置了鼠标响应事件,左边上下箭头为当前楼层有人要上或下的按钮,可以用鼠标直接点击响应,点击后要输入有多少人在此楼层等待,示例点击5楼,输入15人,如图所示: ③ 输入完毕后,电梯会根据单双层或全部楼层4个电梯的忙碌状态调度一个电梯过去,第

ArcGIS 10.2新特性介绍:影像

1.新增栅格类型 新增支持三种新的栅格类型:DMCii.Pleiades 和 SPOT6. 同时,新增提供中国卫星 Raster Type 扩展下载,支持中国卫星影像数据在ArcGIS 中的管理和使用.扩展支持的卫星产品包括: HJ 1A/1B CCD raster type ZY02C HRC raster type ZY02C PMS raster type ZY3 – CRESDA ZY3 – SASMAC 对于支持的国产卫星,正射.融合.镶嵌和匀色等常用处理,通过 ArcGIS 的On-

银行业务调度系统

----------- android培训.java培训.java学习型技术博客.期待与您交流! ------------ 模拟实现银行业务调度系统逻辑,具体需求如下: 1.银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 2. 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 3.异步随机生成各种类型的客户,生成各类型用户的概率比例为:VIP客户 :普通客户 :快速客户  =  1 :6 :3. 4. 客

黑马程序员 银行业务调度系统

模拟实现银行业务调度系统逻辑,具体需求如下: ? 银行内有6个业务窗口,1- 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. ? 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). ? 异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户 :普通客户 :快速客户 =  1 :6 :3. ? 客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小

黑马程序员——Java面试题之交通灯调度系统

面对对象设计 面对对象设计思想:把方法定义在合适的对象上. 人在黑板上画圆,其实是调用圆的构造方法. 司机刹车,实际上刹车的方法在车上面,我们只是调用刹车的方法,刹车的方法在车上. class Circle1{ double r ; public Circle1( double r) { this. r = r; } } new对象就能新建一个圆,计算机的世界也不等同现实世界,不能说徒手画得不圆,不圆的是曲线就不是圆了. 路上的汽车减少,是路增加一个汽车或者减少一个汽车 小球怎样从绳子一端移动到