10分钟跑通第一个定时数据任务:Apache 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
每天早上8点要跑的数据同步,还在靠人肉登录服务器敲 crontab?脚本挂了没人知道,日志散在三台机器上,任务一多依赖关系根本理不清。Apache DolphinScheduler 是分布式任务调度系统,把数据流水线做成可视化 DAG:拖任务、连依赖、定 CRON 计划,失败自动告警,全程不用碰命令行。
它能干什么 🧩
依赖关系乱成一团,先在画布上画出来
一条数据链路里任务超过十个,"谁的产出喂给谁"用文字描述就乱。DolphinScheduler 用 DAG(有向无环图,即任务之间的有方向、不循环的依赖图)来组织任务:没有上游的节点先跑,下游等上游成功才启动。不用写编排代码,把任务拖进画布、拉线连依赖,执行顺序由系统自动推导。
机器挂了,任务不陪葬
集群里 Master 节点(负责派发任务的"调度员")和 Worker 节点(真正执行任务的"工人")都可以横向扩容。某个 Worker 宕机后,系统通过 ZooKeeper(集群里的"协调裁判",负责节点注册与状态感知)把它未跑完的任务重新分派给其他 Worker,已经成功的节点不受影响。
失败告警直接发到 IM
任务失败、流程超时这类事件可以推到邮件、钉钉、企业微信等渠道。告警插件源码在 dolphinscheduler-alert-plugins/,12 种渠道各一个子模块,在界面上填好 webhook 或收件人即可。
装好它:先把单机跑起来
最省事的路径:standalone 单节点
只想先看功能的话,standalone(单机版,把 API、Master、Worker、告警服务塞进一个进程)就够:
git clone https://gitcode.com/GitHub_Trending/dol/dolphinscheduler cd dolphinscheduler ./mvnw clean package -DskipTests cd dolphinscheduler-dist/target/dolphinscheduler-*-bin bash ./bin/dolphinscheduler-daemon.sh start standalone-server启动后浏览器打开http://localhost:12345/dolphinscheduler/ui,用默认账号admin / dolphinscheduler123登录:
丑话说在前:standalone 默认用内存版 H2 数据库(数据存内存里,重启即清空),官方建议只跑 20 个以下工作流。想持久化就直接用 deploy/docker/ 下的一条docker-compose up -d起齐 PostgreSQL、ZooKeeper 和全部服务;大规模生产再看 deploy/kubernetes/dolphinscheduler/ 里的 Helm chart。
场景实战:把每天 8 点的数据同步任务跑起来
需求很具体:每天早上 8 点,先跑一个 Shell 脚本从业务库导出数据,导出成功后再由 SQL 任务写入数仓。
先建"执行者":租户与用户
任务不是以你登录网页的身份跑的,而是以一个系统用户身份跑,这个角色叫租户(对应服务器上的一个 Linux 用户)。先进安全中心 -> 租户管理建租户,比如ds_user;再进安全中心 -> 用户管理,把这个租户分配给你的账号。注意:Worker 所在机器上必须真实存在同名 Linux 用户,否则任务跑不起来。
建项目,再进工作流画布
到项目管理建一个项目——项目是资源隔离的容器,所有工作流必须挂在某个项目下。进入项目后,在工作流定义点创建工作流,就进了拖拽画布:
从左侧面板拖一个 Shell 任务和一个 SQL 任务到画布,分别填任务名、脚本内容、SQL 任务要用的数据源。
连依赖、写调度,然后把工作流上线
把 Shell 任务的输出端拖到 SQL 任务的输入端,一条依赖就画好了。然后在流程属性里用 CRON 表达式写调度时间,这里写0 0 8 * * ?(Quartz 格式,比系统 crontab 多一位"秒"),点上线。记住:不上线的工作流只能手动触发,不会被调度。
任务多了之后可以切树状视图确认执行顺序:
手动触发一次,核对日志
点运行手动触发一次,到工作流实例页看每个节点的状态和完整日志,确认输出文件、写入行数都正常。想确认 Master/Worker 和数据库是否健康,直接看监控页,不用登录服务器:
确认无误后就可以等着 8 点自动触发了。哪次跑失败,告警会按你之前配置的渠道发出去。
踩坑记录:四个高频问题与解法
重启服务后数据"消失"
- 现象:停掉再启动 standalone,工作流、项目全没了。
- 原因:standalone 默认用内存版 H2 存元数据,进程一停数据就清空。
- 解法:需要持久化就按 docs/docs/zh/guide/installation/ 里的数据源配置章节切换外部 MySQL 或 PostgreSQL,或直接改用 Docker、集群部署。
任务一直排队不执行
- 现象:提交的工作流实例里任务长时间停在"等待运行"。
- 原因:集群里没有可用 Worker(没启动,或没注册到 ZooKeeper)。
- 解法:到监控页看服务状态,确认至少一个 Worker 进程存活;排查思路可对照架构文档 docs/docs/zh/architecture/ 的容错章节。
8 点的任务没在 8 点触发
- 现象:调度时间写了,但到点没有生成实例。
- 原因:CRON 写成了 5 位的系统 crontab 格式,而 DolphinScheduler 用 Quartz 的 6 位格式(首位是秒);或者工作流忘了上线。
- 解法:表达式改写成 6 位,如
0 0 8 * * ?;确认流程状态是"已上线"。
任务起报"用户不存在"或 sudo 报错
- 现象:任务秒失败,日志里是 user not exist、sudo 相关错误。
- 原因:Worker 机器上没有租户对应的 Linux 用户,或部署用户没有配置 sudo 免密——DolphinScheduler 靠
sudo -u 租户切换系统用户来执行任务。 - 解法:在所有 Worker 机器上创建与租户同名的系统用户,并给部署用户配置免密 sudo,参考命令见 standalone.md。
深入资源
- 部署文档:standalone、伪集群、集群、kubernetes 四种路线都在 docs/docs/zh/guide/installation/
- 任务插件源码:shell、sql、spark、flink、http 等 30 余种内置任务类型各自独立子模块,见 dolphinscheduler-task-plugin/
- 告警插件源码:dingtalk、wechat、email、http 等 12 个渠道,见 dolphinscheduler-alert-plugins/
- REST API:想从自己的系统管理工作流,接口在 dolphinscheduler-api/
- 架构文档:分布式锁、容错转移、调度流程的细节,见 docs/docs/zh/architecture/
【免费下载链接】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),仅供参考