一种基于离线计算的分布式调度系统

1.1 背景

随着企业业务的扩展,运营管理和生产过程中每天都会产生大量的异构数据,如何能高效的对这些数据进行分析和计算直接影响到大数据在应用中的价值和使用。
调度系统是一个基于工作流引擎的服务器,可以在上面运行Hadoop的MapReduce、Pig等任务。调度系统使用mysql存储工作流任务定义信息,任务之间的依赖信息,当前运行的工作流实例,包括实例的状态和变量等;使用hbase存储运行脚本。调度系统根据用户的配置信息完成复杂的 DAG 任务和定时任务.(包括数据数据抽取、转换和加载)。

应用场景

1.2技术方案的详细阐述

调度架构基本分为以下几个主要部分: NameNode、TaskNode、Web 管理端和日志收集器

在这里插入图片描述
NameNode
NameNode 是调度平台的核心调度节点,负责任务实例化、扫描符合执行条件的实例、检查依赖、分配任务执行节点、处理任务执行结果、管理 TaskNode 节点等核心工作。目前 NameNode 部分支持 Alive-Alive 方式的高可用,并可水平扩展。
TaskNode
NameNode 按照一定的分配策略将任务分配到具体TaskNode 后,TaskNode 会主动从 NameNode 领取任务,并根据任务配置启动任务执行代理器(TaskExec)。代理器会调起任务进程执行。TaskNode 会监听进程执行结果并反馈给 NameNode,同时接收任务日志输出流发送到 JDQ。为防止大量任务因为资源不足而执行失败,节点可设置同时执行任务数(并发数)来避免同 时执行大量任务,另一方面通过cgroup 实现节点级别和任务基本的资源隔离,保护机器和 TaskNode 进程。
(1)节点级别资源隔离
节点可设置最大可用 CPU 和内存,设置成功之后该节点上所有执行的任务使用的资源总和不会超过配置的值。
(2)任务基本资源隔离
单个任务可以单独设置任务要使用的 CPU 和内存。任务执行过程中使用的资源不会超过配置的值。
Web 管理端
Web 管理端为用户提供了操作界面。用户可通过 UI 便捷地实现创建、修改、终止、重跑、补录等功能,极大简化用户操作。
日志收集器
日志收集器是一个 JRC 任务,从 JDQ 消费任务日志并写入Hbase 供管理端查询。

1.3 技术特点

实例
当任务到达预定的执行时间时,会根据任务当时的配置,生成一个任务实例。该实例实际上是当时任务的一个快照。实例化时会将任务的时间参数、依赖等信息具体化。当任务需要重新执行时,会按照当时的实例来执行,保证可重现当时的场景。

分配策略
目前调度系统的 TaskNode 节点已超过 800 台,为了保证能将任务分配到合理的节点执行,调度系统提供了多种策略,包括 轮询策略、并发数策略、机器资源策略等。调度系统中可以将多个TaskNode节点合并成一个虚拟节点,每个虚拟节点可以单独配置分配策略。
(1)轮询策略
轮询策略是最简单的策略,将任务轮流分配给虚拟节点中的 TaskNode 节点。
(2)并发数策略
每个TaskNode 节点可以设置可同时运行的任务数上限,我 们称为并发数。选择该策略时,会根据“并发度=节点上当前在 执行任务数/节点并发数”的结果排序,选择节点并发度小的节 点执行任务。
(3)机器资源策略
TaskNode 节点会将节点目前机器的 CPU 和内存信息上报到 NameNode,选择该策略时,NameNode 会选择一个 CPU和内存使用最低的一个TaskNode 节点来执行任务。

跨周期依赖
任务上下游之间存在依赖,可以理解成为一个有向无环图(DAG 图)。目前调度平台可以很灵活地配置任务之间的关系,比如任务 A 执行成功后才能将任务 B 调用起来。任务 A、B 可以 配置为每分钟、每小时、每天、每周、每年等周期运行。调度平台会自动计算任务 A 的周期执行成功后才将 B 任务调起。为了 更好地理解这个概念,下面我们用个具体的例子进行描述。
示例 1:A 是小时任务,B 是天任务。A 任务 24 个周期全部 执行成功后,B 任务才会被执行;
示例 2:A 是小时任务,B 是天任务。可以指定为检查 A 任 务 5 点到 12 点之间的周期全部执行成功后,B 任务才会被执行;
示例 3:A 任务是天任务,B 任务是小时任务。A 任务当天 (也可以指定为昨天、前天、某一天或某个日期段)执行成功后,B 任务的 24 个周期才可以依次被执行。
示例 4:A 任务是天任务,B 任务是每月运行一次。A 任务
当月(也可以为上月或指定上月 10 号到当月 10 号)周期执行成 功后,B 任务才会被执行。
诸如此类的场景,在调度平台中被称为跨周期依赖。
数据依赖
调度平台还支持检查某个 HDFS 目录是否存在,来做为任务执行前的判断条件。比如某个部门通过自己的业务系统在 HDFS产生了一份数据,下游团队需要使用这份数据做离线计算分析,这可以让业务系统把业务数据写到 HDFS 某目录,同时再生成一 个 ok 或 success(名字可以随意指定)标识文件,文件可允许为空。然后在调度平台里设置检查 HDFS 对应路径的 ok 或 success文件,如果此文件不存在调度平台会持续检查,一旦发现此文件 生成,下游任务就会马上启动执行。
任务图形化展现技术
如何展示上千个任务的关系以及对任务进行配置是个难点。调度系统利用 graph 和动态图形位置算法可支持上千个任务在界面中同时展现。
主要包括:
1、可以在图中对任务进行编辑、禁 用、启用的各种操作;
2、图形化配置技术可以方便直观地看到整个任务的依赖情况;
3、可以对整体任务依赖图进行放大、缩 小、导出图片等功能。用户可以在图形界面完成对于任务的所有属性和依赖关系的配置。
数据模板
数据模板是指调度系统将相关的抽取数据和推送数据的逻辑固化到任务模板当中,通过执行固定的脚本,只需要通过简单的源数据信息和目标数据信息的配置,就能实现不同数据库之间数据抽取和推送。调度系统会动态获取抽数的参数,执行抽取和推送数据的逻辑。
脚本仓库和任务动态执行技术
调度系统为 python、shell 和 zip 包等脚本提供包括存储、版本更新、下载脚本的仓库服务。仓库采用多hbase集群保存脚本 信息,可以保证当集群出现问题的时候可以动态地切换到另外一 个集群当中,保证脚本的安全性和可用性。任务执行的时候调度会动态地下载和更新脚本信息,保证每个任务执行的脚本都是唯一的,并且是最新的,可有效提高任务 的准确率和安全性。
京东大数据的任务调度和管理已基于 Kubernetes 进行了升级和改造。升级后可由 Kubernetes 实现资源的统一管理和分配,提高了服务器的利用率,并实现适应业务需求变化的弹性,能够实现不同业务间的资源混用,进一步提高跨业务的服务器利用率。容器包含了运行环境和可执行程序,可以跨平台和主机使用,使 用镜像管理任务代理,能够实现标准化应用发布,方便持续集成 和测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值