Azkaban 分布式任务调度部署实战

火币集团技术研发中心是火币集团的一级部门, 主要负责7*24实时交易系统,实时风控系统,数字钱包,数据服务,大数据分析等系统的研发和系统维护工作,同时也为火币集团的全球生态事业群提供技术支持。我们致力于搭建全球领先的数字资产交易平台,提供逾两百对数字资产品类的交易及投资服务。同时研发中心也是区块链技术与基础设施的构建者,专注于区块链底层技术和应用场景相结合的研发,逐渐成为该领域的重要力量。

文章正文

Azkaban 任务调度器简介

1.1 为什么需要工作流任务调度系统

一个完整的大数据分析系统通常都是由大量任务单元组成(包括 shell 脚本程序,Java 程序,MR 程序、Hive 脚本等)。各任务单元之间存在时间先后及前后依赖关系。随着业务数据规模的不断发展,这些程序、任务和他们之间的关系也越来越复杂。为了很好地组织和管理这样的复杂过程,我们就需要一个工作流调度系统来调度执行。

例如,我们有这样一个需求,某个业务系统的 MySQL 数据库每天产生 20G 数据。我们每天都要出每日统计报表,处理步骤如下所示:

  1. 每天晚上 00:01 分开始,通过 Sqoop 先按时间戳将前一天的所有业务数据同步到 HDFS 上;

  2. 对这一批数据进行一些预加工处理,输出的数据,存储到多张不同业务的 Hive 表中;

  3. 然后对 Hive 中多个表的数据,按照各种关系合并处理,得到一个明细数据表;

  4. 将明细数据按预定义的维度进行复杂的业务统计分析,得到每日统计报表信息;

  5. 将报表数据,合并到预定义的报表模板,生成邮件,每天 3 点之前发出来给各需求方人员;

  6. 同时需要将统计分析得到的结果数据回流到业务系统中,供业务调用使用。

  7. 如果处理过程出错,需要进行重试,重试失败后通过报警,电话通知值班人员干预处理。

在这个例子中,我们发现一共有六步复杂的处理,且大部分步骤都需要跨越不同的程序,而且全部操作处理过程较长,往往需要几十分钟或几个小时。在整个业务过程中,什么时候开始启动,拉起下一步,某个步骤出错以后具体如何重试处理(如何清理数据、回到哪一步进行重试,超时如何配置等),都需要有某个任务调度机制来处理。

在以往的实践中,我们一般直接使用 linux 的 crontab 来定义简单的任务调度。但 crontab 功能简单,只具有定时拉起命令脚本的功能,不具备流程管理、依赖管理的能力。

后来人们针对 crontab 的痛点,开发出来了ooize、Azkaban、Cascading、Hamake 等开源的 Hadoop 任务调度框架。而 Azkaban 则是其中的佼佼者,轻量级、分布式的工作流任务调度框架,具有使用方便、能严格控制操作权限等优点。

1.2 Azkaban 特性介绍

Azkaban 是由 Linkedin 开源的一个批量工作流任务调度器持续集成的软件工具。用于在一个工作流内以一个特定的顺序运行一组工作和流程。可以调度 command、hadoopMR、hive、spark、pig、impala 等任务,而且支持自定义 plugin 并在一个 project 中定义了一种 KV 文件格式来建立任务 flow 之间的依赖关系,并提供一个易于使用的 web 用户界面维护和跟踪你的工作流。官方网站:https://Azkaban.github.io/

enter image description here

图片来自 Azkaban 官网

Azkaban 特性如下:

  • 兼容 hadoop 的任务版本;
  • 支持作业 web 上传,Ajax 的 API 上传;
  • 支持 web 简易界面管理;
  • 支持任务的定时调度;
  • 支持用户认证及权限管理、并可以实现自定义权限管理功能;
  • 支持可插拔的插件功能;
  • 支持任务邮件报警;
  • 支持 job 失败重试,按照 SLA 执行报警和杀死作业;
  • 可跟踪并记录用户操作记录,并支持日志记录与审计。

其核心组件与架构如下:

  • Relational Database (MySQL): Azkaban 使用 MySQL 来存储项目和执行;
  • AzkabanWebServer :Azkaban 使用 Jetty 作为 Web 服务器,用作控制器以及提供 Web 界面;
  • AzkabanExecutorServer :Azkaban 执行服务器执行提交工作流。

enter image description here

图片来自 Azkaban 官网

零基础搭建分布式 Azkaban

Azkaban 具有三种运行模式:

  • solo server mode :web server 和 executor server 运行在一个进程里;
  • two server mode :web server 和 executor server 运行在不同的进程中;
  • multiple executor mode :web server 和 executor server 运行在不同的进程中, executor server 大于等于2。

由于 multiple executor mode 模式使用较多,具有代表性,本节主要详述 multiple executor mode 的搭建。

2.1 安装前环境准备工作

CentOS 操作系统、MySQL 数据库,Java8 环境

CentOS 操作系统

enter image description here

JDK 版本

enter image description here

本文演示的 MySQL 是测试环境自己搭建的 MySQL,实际生产环境中,MySQL 高可用使用的是 AWS 的 RDS 服务,关于 MySQL 基于 Linux 的 CentOS 系统搭建如下步骤:

  1. 从 MySQL 官网选取合适的 MySQL 版本,获取下载地址。然后使用 wget 下载。

    enter image description here

  2. 安装 yum Repository

    enter image description here

  3. 安装 MySQL 服务端:查看 MySQL server

    enter image description here

  4. 安装

    enter image description here

  5. 启动 MySQL 服务

    systemctl start MySQLd.service

  6. 查看 MySQL 服务是否正常

    enter image description here

    上面显示 active (running) 则表示已经正常启动。

  7. 登陆数据库

    MySQL5.7.6 之后会在启动 MySQL 进程的时候生成一个用户密码,首次登陆需要这个密码才行。密码保存在 MySQL 进程的日志里,即(/var/log/MySQLd.log)。咱们可以 cat 一下这个文件。

    enter image description here

    找到这个密码后,就可以登陆下

作者正在撰写中...
隐藏内容 支付可见
内容互动
写评论
加载更多
评论文章
¥1.99 购买
× 订阅 Java 精选频道
¥ 元/月
订阅即可免费阅读所有精选内容