一、背景与选型
1.1 定义
Apache DolphinScheduler 是一个可视化、分布式的大数据工作流任务调度系统。
通俗点说,就是用来编排和自动执行你那些复杂ETL任务的“指挥中心”。可以把之前写的各个SQL脚本、Shell脚本,都拖拽成一个有依赖关系的流程图(DAG),然后设定好时间(比如每天凌晨2点),它就会按时自动执行,并监控每个任务的运行状态
为什么用DolphinScheduler?
在数据开发中,任务编排是绕不开的痛点。早期用 Crontab 凑合,任务一多依赖关系就乱成麻,失败重试全靠手动,半夜被告警叫醒翻日志是常态。DolphinScheduler 解决的就是这个问题——用可视化 DAG 把依赖理清楚,支持自动重试、补数和告警,而且部署轻量,不依赖外部数据库,而且 DolphinScheduler 是国产开源项目,文档和社区交流都是中文,新手更容易上手。相比 Airflow 和 Azkaban,它更轻、更易上手,用 Docker 一键部署就能快速搭建一套可靠的任务调度系统。所以我选择它作为调度底座。
1.2 主流调度工具对比
| 对比维度 | Azkaban | Airflow | DolphinScheduler |
|---|---|---|---|
| 核心定位 | LinkedIn开源的轻量级Hadoop任务调度器,主打简单依赖和定时执行。 | Airbnb开源,以代码定义工作流(Python)的国际标准调度平台,Apache顶级项目。 | 易观开源的可视化DAG工作流调度系统,Apache顶级项目,国内企业友好型。 |
| 优点 | 1.架构简单:依赖少(仅需MySQL),部署和上手快。 2.Hadoop原生支持:对Hive、Pig等任务友好。 3.轻量稳定:适合低复杂度、纯离线场景。 | 1.DAG表达能力极强:支持复杂条件分支、动态任务,Python代码灵活度最高。 2.生态无比丰富:拥有海量Operator和插件,是DataOps/MLOps的事实标准。 3.社区极其活跃:版本迭代快,云厂商和主流数据工具默认支持。 | 1.UI体验极佳:拖拽式可视化DAG定义,业务人员也能参与。 2.大数据生态集成:对Spark、Flink、Hive等任务支持完善,国内数据中台事实标准。 3.去中心化高可用:多Master/Worker架构,运维相对简单,支持多租户和资源队列。 |
| 缺点 | 1.功能薄弱:DAG表达能力弱,不支持复杂分支、条件判断和任务重试。 2.权限粗糙:仅有项目级权限,多团队管理混乱。 3.社区停滞:更新缓慢,与现代数据栈割裂,不推荐新项目使用。 | 1.运维复杂:组件多(Scheduler, Web, Executor, MetaDB),调优门槛高。 2.Python门槛:必须用Python写DAG,非开发人员无法直接使用。 3.性能瓶颈:Scheduler基于轮询和数据库,任务量巨大时存在性能压力。 | 1.Python生态较弱:动态DAG能力和自定义灵活性不如Airflow。 2.二次开发成本高:海外社区影响力相对有限,深度定制不如Airflow方便。 3.细粒度权限管控:部分权限管控能力有待加强 |
追求国际标准、生态丰富、团队Python技术强→选Airflow。它是数据工程领域最通用的“瑞士军刀”。
追求易用性、可视化、团队技术栈偏Java/Scala或想低门槛→选DolphinScheduler。它在国内企业的数据中台建设中已成为事实标准。
维护老Hadoop系统,任务量很小→可以继续用Azkaban。但任何新项目都不建议再选它
二、部署方式对比
为什么选择Docker部署DS?
| 对比项 | Docker 方式 | 二进制包方式 |
|---|---|---|
| 下载大小 | ~1.5 GB | ~300 MB |
| 网络要求 | 高(经常卡住) | 低 |
| 环境依赖 | 只需 Docker | 需要 Java 8+ |
| 启动速度 | 快(镜像已下载) | 快 |
| 与大数据组件集成 | 需要配置网络 | 直接配置路径即可 |
| 适用场景 | 体验/测试 | 生产部署 |
综上对比,我开始了我的DS探索之旅。下面来讲DolphinScheduler的部署
三、Docker部署
Docker 方式,一键搞定,不用折腾环境
3.1 安装docker
打开Ubuntu终端,运行
# 更新软件包索引 sudo apt update # 安装依赖 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 知道 自己的 Ubuntu 版本 lsb_release -a # 添加 Docker 稳定版仓库(根据你的 Ubuntu 版本,如 20.04 或 22.04) echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 添加 Docker 官方仓库 版本是 Ubuntu 22.04 Jammy echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # 将当前用户加入 docker 组(避免每次都用 sudo) sudo usermod -aG docker $USER #执行完后,退出当前终端会话重新登录,或者执行 newgrp docker,让权限生效。 # 启动 Docker 并设置开机自启 sudo systemctl enable docker sudo systemctl start docker验证一下docker是否正常
docker --version #正常显示版本号,说明安装成功验证普通用户能否执行 docker 命令
docker --version # 不报权限错误,就说明配置好了启动 DolphinScheduler单机体验,遇到拉取docker镜像失败
遇到报错connection refused说明 Docker 无法连接到 Docker Hub 官方镜像仓库。这是网络问题,通常是国内访问 Docker Hub 被限制或速度太慢导致的。
解决方案——尝试配置 Docker 国内镜像加速器,配了中科大、网易、百度等镜像加速源,还可以选择阿里云专属加速器。还可以采取用其他方式部署——直接下载DolphinScheduler 的二进制包运行,不依赖 Docker
注意:Docker镜像拉取失败时,建议改用二进制包方式部署
四、二进制包部署
4.1 下载安装包
在遇到其他镜像源拉取不顺利的情况下,用官方归档站(archive.apache.org),它是最稳定、不会变动的下载源。
wget https://archive.apache.org/dist/dolphinscheduler/3.2.2/apache-dolphinscheduler-3.2.2-bin.tar.gz # 用 Apache 的永久归档链接,比 dlcdn 镜像更可靠,不会出现 404 的情况然后就是漫长的等待过程,经历了3次断点续传!耗时4h31ms
4.2 解压与启动
终于,漫漫waiting过去了,下载好 了
# 解压安装包 tar -xvzf apache-dolphinscheduler-3.2.2-bin.tar.gz # 进入解压后的目录 cd apache-dolphinscheduler-3.2.2-bin # 启动 Standalone Server 服务 bash ./bin/dolphinscheduler-daemon.sh start standalone-server想关闭服务如下
执行启动命令,服务就会重新跑起来,然后打开浏览器访问 就能使用了。
cd apache-dolphinscheduler-3.2.2-bin
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
五、web界面访问
默认账号:admin,密码:dolphinscheduler123。
URL:http://<你的Ubuntu IP地址>:12345/dolphinscheduler/ui
如果是在虚拟机里运行 Ubuntu,需要确认网络模式是桥接模式(Bridged)或 NAT 端口转发,确保宿主机能访问到虚拟机的 IP。
六、DS后台实操
下面来跑一个调度任务,并跑通一个 Shell 任务。
目标:创建一个简单的 Shell 工作流并定时运行它
① 创建租户 (Tenant)
租户就是 DolphinScheduler 用来执行实际任务的Linux 系统用户。这能保证任务有正确的文件系统权限。并在用户管理中把刚才创建的租户分配给用户(下拉框中找到刚刚创建的租户,点击提交),让admin用户有权限提交任务。
填信息,队列默认default就行
② 创建项目 ,工作流都必须归属在项目下。
③ 创建工作流 (Workflow) ,也就是画 DAG 图,进入一个可视化拖拽画布,这个画布是 DolphinScheduler 最核心的地方——拖拽式设计 DAG(有向无环图)。 从左侧工具栏里,把你需要的任务类型(比如 Shell 节点)拖到画布上。把 脚本内容填进去,或者引用你上传的资源文件。 一个节点与另一个节点之间形成它们的ETL前后依赖关系(比如:ODS装载完成,才执行DWD清洗)。
DAG (有向无环图):这是核心思想,所有任务依赖关系都在这个图里清晰展示。DAG 说白了就是:谁先跑,谁后跑,用箭头连起来(任务先后执行流程图)。
任务类型:它原生支持 Shell、Hive、Spark、SQL 等几十种任务,非常贴合大数据场景,Hive SQL可以直接用。
④ 上线 填写节点名称,并输入脚本,都配置好了点击保存工作流,点击「上线」
⑤ 定时 接着会弹出问你要不要设置定时调度 ,有需要的话就点击,没有需要就关闭弹窗。定时任务让凌晨时刻执行,这样数仓ETL就会每天自动跑起来了!
⑥ 看效果 点左侧“工作流实例”→ 点击这个实例看到 绿色=成功,右键点任意节点 →“查看日志”,能看到你写的 echo 内容
DAG(有向无环图)的核心:
有向:箭头指明了方向(A→B 就是 A 先跑)
无环:没有回路(不会 A→B→A 死循环)
思考—从 C 再拖一条线回到 A?
系统会提示“不允许形成环”,这就是“无环”的体现。
还可以把任务类型换成“SQL”或“Hive”节点,感受一下不同任务类型。
总结流程
建租户 -> 建项目 -> 拖任务建 DAG -> 上线 -> 定时是 DolphinScheduler 的标准使用模式
遇到的问题
没有可安装候选
在知道自己的系统版本之后,按照下面一步步排查解决,最后验证版本号正常就可以了
# 1 删除可能存在的旧配置 sudo rm -f /etc/apt/sources.list.d/docker.list sudo rm -f /etc/apt/sources.list.d/docker-ce.list # 更新软件包列表 sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release # 2 安装必要依赖 # 3 添加 Docker 官方 GPG 密钥 # 创建密钥存放目录 sudo mkdir -p /etc/apt/keyrings # 下载并添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置密钥文件权限 sudo chmod a+r /etc/apt/keyrings/docker.gpg # 4 添加 Docker 官方源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ## 更新软件包列表 sudo apt update # 5 安装 Docker sudo apt install -y docker-ce docker-ce-cli containerd.io七、常见问题 FAQ
Q1 怎么知道服务器IP?
① Windows:打开命令行,输入ipconfig,找到IPv4地址。
② Mac/Linux:打开终端,输入ifconfig或ip addr,找到inet后面的数字。
③ 云服务器:直接看服务商控制台给的公网IP。
④ 如果Docker跑在本机:访问http://localhost:12345/dolphinscheduler/ui就行。
八、总结
学习顺序
熟练DS拖拽编排→对接Hive/MySQL调度SQL任务→学习Airflow基础DAG编写
高频考点
DS架构、HA高可用原理、任务失败重试、补数机制
演示视频
dolphinscheduler
完结!