大数据系统之任务调度[1]

什么是任务调度系统?

A job scheduler is a computer application for controlling unattended background program execution of jobs (from wikipedia)

简单来说就是你有很多任务, 彼此之间执行必须有一定顺序构成一个DAG. 如下图所示:

一个简单的 DAG 示意图

为什么需要任务调度系统


数据终究是要拿来计算的. 假设我们从小白开始搭建一套数据计算系统.

  • 数据计算第一阶段:

    • 搭建了 Hadoop, 执行几个 Hive 脚本统计数据
    • 为了简单, 代码直接写到一个 HQL 文件中, 每天晚上 12 点执行, 计算前一天的运营数据
  • 大数据系统建设第二阶段:

    • 数据需求开始增多, 你每天加班加点的开发新的计算, 放到同一个 HQL 文件中
  • 数据计算第三阶段: 拆

问题:

  • 有一天你发现 HQL 文件已经一千多行了

    • 计算逻辑复杂, 牵一发而动全身
    • 时不时会有某个计算失败, 全部计算重新执行很浪费时间
    • 老板看你忙不过来, 给你招了几个小弟一起开发. 需要分拆任务
  • 大 HQL 文件根据逻辑拆成几十个小的计算文件

  • 每个开发负责一块业务的计算, 使用简单的 bash 脚本按顺序调用 hive -f 执行几十个 HQL 文件进行计算

  • 小心安排几十个计算的先后顺序, 避免顺序颠倒导致计算错误

  • 计算变成了一大串鞭炮, 挨个执行

  • 数据计算第四阶段: 并发

问题:

  • 任务太多, 串行执行时间太长

  • 一个任务失败, 后续任务全部等待, 效率很低

  • review 所有的计算任务, 找到可以并发执行的计算任务

  • 想办法并发执行互不相干的一些任务, 计算任务仅仅依赖必须依赖的前置任务, 因此计算任务由一串鞭炮 组成了一个 DAG

因此, 我们对调度系统的需求如下:

  • 分解计算任务. 计算任务不单只有 Hive
  • 任务执行之间能够互相依赖, 前置任务失败, 后续依赖任务不执行
  • 尽可能的并行执行任务, 缩短执行时间
  • 定时触发计算任务. daily/weekly/hourly 等
  • 任务失败报警. 对于计算失败的重要任务, 报警必不可少. 哪个数据工程师没有半夜起来修复过失败的计算任务?

从系统的角度来说, 调度系统应该包含以下几个模块:

  • Scheduler 模块: 负责调度 DAG, 根据条件触发任务执行
    • 按时启动任务, 最好支持 Cron 表达式
    • 提供任务执行结果上报接口, Executor 模块通过该接口告知 Scheduler 任务执行状态. 接口不一定是 restful api, 数据库可以作为接口
    • DAG 执行过程中, 根据已经成功的任务, 决定下一个满足依赖条件的任务
    • 报警模块. 任务执行失败后, 根据配置的规则, 给响应的值班人员报警.
  • Executor 模块: 负责根据 Scheduler 指令, 执行对应的任务
    • 获取任务执行接口. Scheduler 通过接口通知 Executor 执行任务
    • 重试机制. 提供一定重试机制, 当任务因为网络抖动等原因失败时自动重试, 减少报警次数, 也就是减少数据工程师半夜爬起来的次数 LOL.
      • 重试次数不能太多, Fail Fast 在 Batch 计算业务中也同样重要
      • 计算任务必须具备幂等性. 例如, 一个 Hive 计算写成如下方式
-- test.tmp_test_table 用于存储中间计算结果
CREATE TABLE test.tmp_test_table AS
SELECT data_date,
       count(*) AS cnt
FROM test_data
GROUP BY data_date;

是否具备幂等性? 回答是否定的. 因为一旦任务执行成功, 第二次执行时 test.tmp_test_table 已经存在, 任务会报错 (Table Already Exists).
如何修改? 很简单, 前面加一句 DROP TABLE IF EXISTS test.tmp_test_table 便可.

  • 代码部署方式. Executor 要执行计算必须有代码. 那如何获取计算任务的代码就是一个问题. 从扩展性来说, Executor 一定要支持分布式部署, 也就是一个 Scheduler 多个Executor.
    • 一种方式是, 将计算代码部署到每个 Executor 节点.
      采用这种方式要求使用者必须有自动化部署, 因为计算代码漏部署或者错误部署了一台 Executor, 很有可能是测试阶段由于计算任务没有被分配到错误的 Executor 节点而真正夜间计算时错误的 Executor 节点被分配了计算任务导致失败.
    • 改进的一种方案是: 代码仅仅部署到 Scheduler 节点, 每次 Executor 拿到计算任务后, 通过 Scheduler 提供的 API 下载相应的计算代码.
    • 思考: 以上两种方案解决的仅仅是计算代码的部署问题, 没有考虑计算代码依赖的 Library 的问题. 如果计算代码中有外部依赖, 比如一些 Native 的 Library, 就需要在每个 Executor 上安装所有计算代码依赖的 Library. 最悲催的是: 如果两个计算任务依赖的 Library 的版本不一样就悲催了.
  • Web UI 模块:
    • 查看 DAG,
    • 手动修复失败任务
    • 看日志. 任务执行日志查看.
      • 不支持 Tail 功能
      • 不支持 Grep 功能, 基本上可以断定是: 不好用!

调度系统的需求明确了, 甚至各个模块的功能都想清楚了, 我们就可以像"选妃子"一样, 看市面上有哪些可选的开源项目

开源调度系统


两个系统都很不错, 也能够解决大多数需求. 网上针对两个的比较也很多, 我就不班门弄斧了.


继续上文中关于计算代码依赖 Library 的思考

  • 计算任务代码可以分成两部分:
    • 调度配置文件. 前置任务, 启动参数等
    • 计算代码文件. 这才是会产生外部 Library 依赖的代码.

因此, 如果我们把计算代码装进 Docker, 不就彻底解决了依赖问题?

-- EOF --

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,924评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,781评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,813评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,264评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,273评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,383评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,800评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,482评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,673评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,497评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,545评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,240评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,802评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,866评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,101评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,673评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,245评论 2 341

推荐阅读更多精彩内容