ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DolphinScheduler 工作流调度实战指南

DolphinScheduler 工作流调度实战指南 DolphinScheduler 工作流调度实战指南【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler如果你写过十几条 crontab就知道那套痛任务之间有依赖、依赖有先后、一条挂了要整条链重跑、机器挂了没人知道。DolphinScheduler 工作流调度解决的就是这个问题——把任务拖进一张依赖图DAG定时分发到一组分布式 worker 上执行自带重试、超时告警和故障恢复。它适合多台机器上周期性地跑 Shell、SQL、Spark、DataX 这类任务如果你只有一台机器、几条脚本crontab 就够了没必要为此引入一套集群。看不惯纯文字先记住它的排班制度。你可以把 DAG 理解成工厂流水线每个任务是一个工位箭头表示谁干完下一个才能开工。Master 是只动嘴不动手的调度中心负责领工单数据库t_ds_command表里的一行命令再把任务派出去Worker 是真正干活的人跑着 任务插件shell、sql、spark、datax 等 30 多种。所以它和 Airflow 最大的差异有两点任务不是在 Python 代码里定义而是在可视化 DAG 上拖出来任务执行不占调度进程Master 和 Worker 是各自独立部署的进程能分开扩容——Worker 加机器就加并行容量。全文路线图速览DolphinScheduler 调度解决什么问题、执行链路怎么走场景一怎么配跨工作流依赖让早上的日报不卡在等上游场景二重试、超时、Worker 分组参数怎么配让失败能自愈踩坑三条命令队列积压、卡死任务占线程、Worker 环境缺失上线前自查表切换正式任务前过一遍的 10 个检查项场景一跨工作流依赖怎么配日报才不卡住你要达成什么每天早上 7 点报表数据必须出现在看板里。但报表依赖的上游 ODS 入仓是另一条工作流、另一拨人在维护它可能 22 点跑完也可能因为源库慢拖到 23 点。你要的效果是上游没跑完就等着上游失败就直接告警别给我一份半拉子报表。内部怎么串起来在工作流开头放一个 Dependent 节点。你可以把它理解为上一场会议的纪要归档了才开下一场会——它运行时不干活只去查指定的上游工作流或上游工作流里的指定任务在对应周期内是否成功。等它通过DataX 节点把 Hive 结果表同步进 MySQL 报表库后面用一个子工作流节点包住Spark SQL 汇总 数据质量检查这两步。子流程你可以理解为把另一整条流水线整体当成一个工位用多条报表线可以复用同一套生成逻辑改一处全生效。运行时链路是UI 点运行后往t_ds_command表插一行命令Master 消费到命令后按 DAG 拓扑顺序逐节点调度每个节点派给一台 Worker 执行节点成败以生命周期事件回传 Master。具体编排逻辑在 Master 执行引擎 里想看细节可以直接翻源码。关键配置长啥样配置项建议值说明依赖目标上游工作流 依赖所有任务上游任一任务失败就拦下来依赖周期上一周期对应文档里的昨日概念见 Dependent 节点文档检查间隔60s轮询上游状态的间隔调太短会空转压元数据库依赖失败策略失败选等待只在上游可能补跑时用分区传参${system.biz.date}内置参数表示定时时间前一天格式见 内置参数文档场景二重试与超时参数怎么配失败能自愈你要达成什么网络抖一下、Worker 机器重启、任务脚本本身有毛刺——单点故障应该由系统自己兜住别指望值班的人 3 分钟爬起来手动重跑7 点的 deadline 不能挪。内部怎么串起来Worker 执行完任务无论成败都会向 Master 上报生命周期事件。失败且重试次数没用完时Master 会按间隔重新提交这个任务节点如果整个 Worker 心跳丢了Master 的 failover 逻辑会接管它手里在跑的任务重新派给别的机器——这段逻辑在 Master failover 模块。但实际跑起来你会发现重试兜不住任务根本起不来和任务起得来但死循环这两种情况前者靠环境配置后者靠超时保护。关键配置长啥样参数建议值说明失败重试次数3覆盖网络抖动这类瞬时故障字段含义见 任务参数附录失败重试间隔2 分钟间隔太短等于立刻撞第二次太长错过恢复窗口超时告警失败卡死任务到点直接判失败不占着线程等天亮Worker 分组按环境绑定分组就是专用车道需要 DataX/Spark 环境的任务绑定专属分组不靠默认分组随机派发环境类参数在 Worker 侧配置以 DataX 任务为例# conf/env/dolphinscheduler_env.sh改完重启 worker export DATAX_LAUNCHER/opt/datax/bin/datax.py export PYTHON_LAUNCHER/opt/anaconda3/bin/python踩坑三条现象 → 根因 → 对策坑 1点了运行工作流实例不出现现象UI 上点运行命令列表有记录但就是不出工作流实例任务全都没动。根因执行是命令驱动的Master 不消费t_ds_command就不会有实例——Master 进程挂了或和注册中心会话断了工单就在表里积压。对策SELECT count(*) FROM t_ds_command;非 0 且持续增长说明积压检查 master-server 进程与注册中心连接恢复后重启 Master 即可继续消费。坑 2一个任务卡死几小时别的任务全排队现象Worker 线程池被占满新派发的任务长时间处于等待状态。根因卡死任务没设超时或task.resource.limit.state没打开超时判失败的能力整体不生效见 配置文档。对策打开task.resource.limit.state给关键任务设超时告警为失败让卡死任务到点被 kill 掉。坑 3DataX 任务全量报错说找不到 python/datax现象同一条 DataX 任务换哪台 Worker 跑都报命令缺失。根因Worker 机器上dolphinscheduler_env.sh没配DATAX_LAUNCHER/PYTHON_LAUNCHER默认分组里混着没有环境的机器任务随机派过去必挂。对策按场景二的环境块补齐变量并重启 Worker同时把这类任务绑到配好环境的专用 Worker 分组别再依赖随机派发。上线前自查表切换正式任务前过一遍序号检查项防什么现象操作是否达标1Master 单点Master 部署 2 台以上监控页确认全部在线☐2注册中心抖动ZooKeeper或 Etcd3 节点起心跳更新及时☐3命令队列积压跑一轮测试流后t_ds_command无 pending 行☐4瞬时故障整链挂关键任务已设重试 3 次、间隔 2 分钟☐5卡死任务占线程超时告警设为失败且资源限制开关已开☐6Worker 环境缺失目标机器已配DATAX_LAUNCHER等变量并重启☐7任务派到无环境机器依赖环境的任务已绑定专属 Worker 分组☐8告警发不出去手动发一条测试告警确认渠道收到☐9元数据丢档元数据库备份任务已配置并成功恢复演练一次☐10Worker 宕机任务悬空停一台 Worker确认在跑任务被重新派发后继续☐延伸阅读Dependent 依赖检查节点文档DataX 节点文档含环境配置说明任务默认参数附录重试、超时、Worker 分组字段内置参数system.biz.date 等含义Master 模块说明执行引擎与 failover【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表