首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >深夜无需加班,Apache Doris让数据自己会跑

深夜无需加班,Apache Doris让数据自己会跑

作者头像
一臻数据
发布2024-12-24 16:18:54
发布2024-12-24 16:18:54
6050
举报
文章被收录于专栏:一臻数据一臻数据

"老王,你昨晚加班到几点?" "凌晨3点!就为了等数据同步完成..." "你还在手动跑数据啊?这都快2025年了!" 相信很多数据从业者都经历过这样的对话。深夜里,一个人盯着屏幕,等待数据同步完成;周末时,因为定时任务出错而紧急处理;或者被老板追问"为什么报表数据还没更新?" 如果你也遇到过这些烦恼,那今天要介绍的Apache Doris作业调度功能一定让你眼前一亮!畅想一波,所有的数据任务都能像城市里的地铁一样准时运行,像万千能力于一身的智能管家一样自动执行,出现问题还能自动恢复,这是多少数据魔芋师的梦想? 今夜,一起走进Apache Doris 2.1版本的Job Scheduler世界,看看它如何让数据自己会跑!

Apache Doris作业调度:一个让数据流动更智能的故事

在数字化转型的浪潮下,数据就像城市里川流不息的车流。每天早高峰,人们需要规划最优路线;每每夜幕,环卫工人需要定时清扫街道。数据世界也是如此 - 定期的数据同步、清理、备份,构成了数据管理中不可或缺的一环。

我们都经历过这样的痛点 - 需要反复手动执行数据导入,或者依赖外部调度系统带来的种种不便。外部调度系统有时会像一个不太靠谱的闹钟,有时候会突然由于表达不清和上下游断连,让你错过重要会议。更糟糕的是,它还会产生"重复预警" - 明明任务已经完成,却还在不停地提醒你去做。

Apache Doris 2.1版本推出的Job Scheduler正是为解决这些困扰而生。它就像一个完全自控而精准的智能管家,不仅能够按时完成各项任务,还能保证任务的可靠性和一致性。

从技术角度看,Job Scheduler采用了时间轮算法与Disruptor的创新组合。时间轮就像一个精密的钟表机械,每一格都代表一个时间单位,能够精确到秒级别的调度。当指针转到特定位置时,相应的任务就会被触发。

Disruptor则像一个高效的任务分发中心,通过单生产者多消费者模型,确保任务能够被合理分配和执行,避免出现"一窝蜂"的现象。这种设计不仅保证了调度的精准性,还最大限度地降低了资源消耗。

让我们通过一个电商数据分析的真实场景来感受Job Scheduler的魅力。每天凌晨,系统需要将MySQL中的用户行为数据同步到Doris中进行分析。以往这个过程可能需要手动操作或依赖外部调度系统,现在只需要一个简单的Job定义就能搞定:

代码语言:javascript
复制
CREATE JOB daily_sync
ON SCHEDULE EVERY 1 DAY 
STARTS '2024-11-19 03:00:00'
DO INSERT INTO user_behavior 
SELECT * FROM mysql_catalog.user.behavior 
WHERE create_time >= days_add(now(),-1);

解锁Doris数据智能调度的进阶玩法

看过现代工厂的生产线吗?原料在传送带上有条不紊地流动,每个工位都精准地执行着自己的任务。Job Scheduler正是数据世界里的"智能生产线"。

在实际业务场景中,Job Scheduler展现出了令人惊喜的灵活性。一个典型的用户画像系统需要定期完成多个环节:数据同步、清洗、计算标签、更新画像。通过Job Scheduler,我们可以轻松编排这些任务:

代码语言:javascript
复制
-- 每天凌晨2点同步用户基础数据
CREATE JOB sync_user_base
ON SCHEDULE EVERY 1 DAY
STARTS CONCAT(DATE_FORMAT(NOW(), '%Y-%m-%d'), ' 02:00:00')
DO INSERT INTO user_base 
SELECT * FROM external_catalog.user_source
WHERE update_time >= DATE_SUB(CURDATE(), INTERVAL 1 DAY);

-- 每天凌晨3点计算用户消费标签
CREATE JOB compute_user_tags
ON SCHEDULE EVERY 1 DAY
STARTS CONCAT(DATE_FORMAT(NOW(), '%Y-%m-%d'), ' 03:00:00')
DO INSERT INTO user_tags
SELECT user_id,
       SUM(amount) as total_amount,
       COUNT(DISTINCT order_id) as order_count,
       MAX(create_time) as last_order_time
FROM order_detail
GROUP BY user_id;

Job Scheduler的精妙之处在于它对任务执行状态的严格管控。就像餐厅里的点单系统,每个订单的状态都被清晰地记录和追踪。当遇到异常情况时(比如网络抖动),系统能够智能地做到自恢复,高可用,确保数据的一致性。

这种设计特别适合处理那些对时效性和准确性都有较高要求的场景。以推荐系统为例,用户兴趣模型需要及时更新,但又不能容忍数据错误。Job Scheduler提供的精准调度和事务保障机制,完美地解决了这个看似矛盾的需求。

破解数据调度的进阶密码

数据调度就像一场精心编排的交响乐,每个环节都需要精确到位。Job Scheduler通过一系列独特的设计,让这场"数据交响曲"完美演绎。

时间轮算法好似一个智能闹钟系统。每个时间槽都精确记录着即将执行的任务,指针转动时会触发相应任务。这种设计不仅保证了调度的精准性,还极大地降低了内存占用。

生活中,在繁忙的地铁站,如果所有乘客都挤在同一个闸机,必然会造成拥堵。Disruptor的设计理念与此类似 - 通过单生产者多消费者模型,确保任务能够高效分发和执行。

那么,最后之前小结下Doris 内置的 Jon Scheduler 具备的主要特点:

  • 高效调度:Job Scheduler 可以在指定的时间间隔内安排任务和事件,确保数据处理的高效性。采用时间轮算法保证事件能够精准做到秒级触发。
  • 灵活调度:Job Scheduler 提供了多种调度选项,如按 分、小时、天或周的间隔进行调度,同时支持一次性调度以及循环(周期)事件调度,并且周期调度也可以指定开始时间、结束时间。
  • 事件池和高性能处理队列:Job Scheduler 采用 Disruptor 实现高性能的生产消费者模型,最大可能的避免任务执行过载。
  • 调度记录可追溯:Job Scheduler 会存储最新的 Task 执行记录(可配置),通过简单的命令即可查看任务执行记录,确保过程可追溯。
  • 高可用:依托于 Doris 自身的高可用机制,Job 可以很轻松的做到自恢复,高可用。

在此我们创建一个定时调度任务作为示例:

代码语言:javascript
复制
// 从  2023-11-17 起每天定时执行 insert语句直到 2038 年结束
CREATE
JOB e_daily
    ON SCHEDULE
      EVERY 1 DAY 
      STARTS '2023-11-17 23:59:00'
      ENDS '2038-01-19 03:14:07'
    COMMENT 'Saves total number of sessions'
    DO
        INSERT INTO site_activity.totals (time, total)
        SELECT CURRENT_TIMESTAMP, COUNT(*)
        FROM site_activity.sessions where create_time >=  days_add(now(),-1) ;

除此之外,Job Scheduler的未来发展令人期待,Doris Job Scheduler 还会支持以下特性:

  • 支持通过 UI 界面查看不同时段执行的任务分布情况。
  • 支持 JOB 流程编排,即 DAG JOB。这意味着我们可以在内部实现数仓任务编排,与 Catalog 功能叠加将会更高效地完成数据处理和分析工作。
  • 支持对导入任务、UPDATE、DELETE 操作进行定时调度。

你看,这就似一场精彩的魔术表演 - Doris Job Scheduler不仅让数据管理变得简单,更让它充满了智慧与优雅,让数据自己会跑。

下期,我们将一起探讨Doris其它更有趣有用有价值的内容,敬请期待!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一臻数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apache Doris作业调度:一个让数据流动更智能的故事
  • 解锁Doris数据智能调度的进阶玩法
  • 破解数据调度的进阶密码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档