DolphinScheduler快速了解(二)

一、DolphinScheduler 收费吗?

答案是:核心开源版完全免费 🆓

DolphinScheduler 是 Apache 软件基金会 的顶级开源项目,采用 Apache 2.0 协议,这意味着:

你能做的事 说明
✅ 免费下载使用 从官网/GitHub直接下载,0元
✅ 免费商用 公司拿来调度日均千万级任务,不花一分钱
✅ 免费改源码 看源代码、改源代码,完全合法
✅ 免费二次开发 基于它开发自己的产品

那它靠什么赚钱?

核心团队成立了白鲸开源(WhaleOps)公司,提供商业版 WhaleScheduler

复制代码
开源版 DolphinScheduler(Apache 2.0)
        ↓ 免费,社区支持
   ┌────┴────┐
   │ 基础功能  │ 满足90%企业需求
   └─────────┘

商业版 WhaleScheduler
        ↓ 收费,企业级服务
   ┌────┴────────────────┐
   │ 更强调度引擎         │
   │ IDE编辑界面          │
   │ 行业定制功能(金融等) │
   │ 7×24技术支持         │
   │ 安全加固 + SLA保障   │
   └──────────────────────┘

打个比方:DolphinScheduler 就像免费的安卓系统,人人都能用;WhaleScheduler 就像某些厂商的定制版安卓,加了专属功能+售后保障。


二、依赖条件有哪些?

把 DolphinScheduler 跑起来,需要这些"地基":

硬性依赖(缺一不可)

依赖组件 最低版本 作用 一句话解释
Java (JDK) JDK 1.8+ 运行环境 DS 本身是 Java 写的,就像打游戏需要先装显卡驱动
MySQL 5.7+ 数据存储 存放工作流配置、任务执行记录、用户信息
ZooKeeper 3.4.6+ 注册中心 "签到表"------记录哪些 Master 和 Worker 在线,谁挂了立刻知道

可选依赖(按需添加)

依赖组件 何时需要 作用
HDFS / S3 任务需要共享脚本/文件时 资源中心,统一存放任务执行需要的脚本
Hadoop / Spark 任务是大数据计算任务时 实际跑数据的计算引擎
Docker / K8s 容器化部署时 一键启动,省去手动安装各种依赖

一图看懂依赖关系

复制代码
你写的任务(Shell、Python、Spark、SQL...)
              ↑ 靠它调度执行
     ┌────────────────┐
     │ DolphinScheduler│  ← Java 1.8+
     └───┬────────┬───┘
         │        │
    ┌────▼───┐ ┌─▼────────┐
    │ MySQL  │ │ZooKeeper │
    │ 5.7+   │ │ 3.4.6+   │
    │(存数据) │ │(管心跳)   │
    └────────┘ └──────────┘
         │
    ┌────▼────┐  (可选)
    │  HDFS   │  存放共享脚本和资源文件
    └─────────┘

三、怎么使用它?

四种使用方式,从简单到高级

方式一:Web UI 拖拽(最简单,推荐入门)

打开浏览器,像画流程图一样拖拖拽拽就能创建工作流:

复制代码
步骤:
1. 登录 Web 界面
2. 进入"项目管理" → 新建工作流
3. 从左侧拖拽任务节点到画布上
   - 拖一个"Shell"节点 → 写一段 bash 脚本
   - 拖一个"Python"节点 → 写一段 Python 代码
   - 拖一个"SQL"节点 → 写一条查询语句
4. 用箭头连线,表示依赖关系
5. 设置定时触发(比如"每天凌晨2点")
6. 保存 → 上线 → 自动运行
方式二:Python SDK(程序员最爱)
python 复制代码
# 用代码定义工作流(像写配置文件一样简单)
from pydolphinscheduler.core.process_definition import ProcessDefinition
from pydolphinscheduler.tasks import Shell

# 创建一个工作流
with ProcessDefinition(name="每日报表") as pd:
    # 任务1:抽取数据
    task_extract = Shell(name="抽取数据", command="python extract.py")
    # 任务2:清洗数据(依赖任务1)
    task_clean = Shell(name="清洗数据", command="python clean.py")
    # 任务3:生成报表(依赖任务2)
    task_report = Shell(name="生成报表", command="python report.py")
    
    # 定义依赖关系
    task_extract >> task_clean >> task_report
    
    # 提交到 DolphinScheduler
    pd.submit()
方式三:Open API(系统对接)
bash 复制代码
# 用 curl 调用 REST API,适合和其他系统对接
curl -X POST http://你的DS地址:12345/dolphinscheduler/projects/项目名/process-definition \
  -H "token: 你的令牌" \
  -H "Content-Type: application/json" \
  -d '{工作流定义JSON}'

适合的场景:你的其他系统(比如 DeerFlow AI Agent)通过 API 自动创建和触发工作流。

方式四:YAML 配置文件
yaml 复制代码
# 用声明式的方式定义工作流(最新版本支持)
workflow:
  name: 数据ETL流水线
  tasks:
    - name: 数据抽取
      type: SHELL
      command: echo "开始抽取..."
    - name: 数据转换
      type: SHELL
      command: echo "开始转换..."
      dependencies: [数据抽取]

四、工作原理(深入浅出)

4.1 整体架构:包工头 + 工人模式

复制代码
                  ┌──────────────┐
                  │  用户/系统    │
                  │ (Web/API/SDK) │
                  └──────┬───────┘
                         │ 提交工作流
          ┌──────────────┼──────────────┐
          ▼              ▼              ▼
   ┌────────────┐ ┌────────────┐ ┌────────────┐
   │ API Server │ │ API Server │ │ API Server │  ← 接收请求
   │   (接口)   │ │   (接口)   │ │   (接口)   │
   └─────┬──────┘ └─────┬──────┘ └─────┬──────┘
         │              │              │
         └──────────────┼──────────────┘
                        ▼
               ┌────────────────┐
               │   ZooKeeper    │  ← "签到表",管心跳/选举
               └────────┬───────┘
                        │
         ┌──────────────┼──────────────┐
         ▼              ▼              ▼
   ┌──────────┐  ┌──────────┐  ┌──────────┐
   │ Master 1 │  │ Master 2 │  │ Master 3 │  ← 包工头们
   │ (活跃)   │  │ (待命)   │  │ (待命)   │     通过ZK选举,1个干活
   └────┬─────┘  └──────────┘  └──────────┘     其他随时准备接班
        │ 分配任务
        ├──────────┬──────────┐
        ▼          ▼          ▼
   ┌────────┐ ┌────────┐ ┌────────┐
   │Worker 1│ │Worker 2│ │Worker 3│  ← 工人们(真正执行任务)
   │(执行A) │ │(执行B) │ │(执行C) │     可以随时增加/减少
   └────────┘ └────────┘ └────────┘

4.2 一个任务从提交到执行的完整旅程

以"凌晨2点自动跑每日报表"为例:

复制代码
第1步:你创建工作流
  ┌─────────────────────────────┐
  │ Web界面拖出:                │
  │  [抽取] → [清洗] → [报表]    │
  │  定时:每天凌晨02:00         │
  └──────────┬──────────────────┘
             │ 保存到 MySQL
             ▼
  ┌─────────────────────┐
  │  MySQL 数据库        │
  │  t_ds_process_      │
  │  definition 表      │  ← 工作流定义存在这里
  └─────────────────────┘

第2步:凌晨2点到,触发调度
  ┌──────────────────────────────┐
  │ Master 扫描一张"命令表"        │
  │ (t_ds_command)               │
  │ 发现有命令:"执行工作流#123"    │
  └──────────┬───────────────────┘
             │ 解析依赖关系
             ▼
  ┌──────────────────────────────┐
  │ Master 判断:                 │
  │ [抽取] 没有依赖 → 立即分配     │
  │ [清洗] 依赖[抽取] → 等它跑完   │
  │ [报表] 依赖[清洗] → 再等等     │
  └──────────┬───────────────────┘
             │ 先分配"抽取"任务
             ▼
  ┌──────────────────────────────┐
  │ Worker 接收任务:             │
  │ 1. 如果有脚本文件,从HDFS下载  │
  │ 2. 创建临时目录               │
  │ 3. 执行命令(如 python xxx)  │
  │ 4. 实时回报状态给 Master      │
  └──────────┬───────────────────┘
             │
     ┌───────┼───────┐
     ▼       ▼       ▼
  成功✅   失败❌   超时⏰
     │       │       │
     │   自动重试3次  发告警
     │   还失败→告警   ↓
     │       └───────┤
     ▼               ▼
  [清洗]任务      短信/邮件/
  自动触发        钉钉通知你

第3步:全部完成
  ┌──────────────────────────────┐
  │ 所有任务状态更新到 MySQL       │
  │ Web界面 DAG 图全部变绿 ✅      │
  │ 你可以随时查看每个任务的日志    │
  └──────────────────────────────┘

4.3 核心机制详解

① DAG 依赖解析

复制代码
工作流:[A] → [B] → [D]
              ↘
               [C] → [E]

Master 这样解析:
- 第1轮:A 没有依赖 → 分配给 Worker
- 第2轮:A完成 → B 和 C 并行分配(它们互相不依赖)
- 第3轮:B完成 → 检查D:B✅ C❌ → D还不行,等着
         C完成 → 检查D:B✅ C✅ → D可以跑了!
               检查E:C✅ → E也可以跑了!
- 第4轮:D和E并行跑
- 完成!

② 去中心化高可用(HA)

复制代码
Master挂了怎么办?
  Master1(活跃) → 💥 挂了
       ↓
  ZooKeeper 发现 Master1 心跳断了
       ↓
  立即从 Master2、Master3 中选举新老大
       ↓
  Master2 成为"活跃Master" ← 无缝接班
       ↓
  正在跑的任务?一个不丢!新 Master 从数据库恢复状态

Worker 挂了怎么办?
  Worker1 → 💥 挂了(正在执行任务A)
       ↓
  Master 发现 Worker1 心跳断了
       ↓
  任务A 自动重新分配到 Worker2
       ↓
  Worker2 从头执行任务A ← 任务不丢!

③ 任务队列(防过载)

复制代码
不是来一个任务就立刻压给 Worker
     ↓
任务先进入队列排队
     ↓
Master 根据 Worker 的负载情况分配
     ↓
Worker1 空闲 → 给 Worker1
Worker1 正在忙 → 等会儿或给 Worker2
     ↓
避免"一台机器累死,其他机器闲着"

五、总结三连

问题 答案
收费吗? 开源版完全免费(Apache 2.0),商业版 WhaleScheduler 付费
依赖什么? 必备:Java 1.8+、MySQL 5.7+、ZooKeeper 3.4.6+;可选:HDFS、Hadoop、Spark
怎么用? 4种方式:Web拖拽(最简单)、Python SDK(程序员最爱)、Open API(系统对接)、YAML(声明式)
什么原理? Master-Worker架构 + ZooKeeper HA + DAG依赖解析 + 任务队列防过载

记住一句话 :DolphinScheduler = 免费的分布式任务管家,装好 Java + MySQL + ZooKeeper 就能跑,打开浏览器拖拖拽拽就能用。Master(包工头)管分配,Worker(工人)管执行,谁挂了自动有人替上。


六、一句话厘清与DIFY/COZE的关系

DolphinScheduler = 数据流水线调度工
Dify / Coze = AI 应用搭建平台

它们的关系是互补协作,而非竞争替代。


七、生活化类比:三者的定位

想象你在经营一家连锁奶茶店 🧋:

角色 谁来做 对应工具
后端原料供应 每天凌晨从农场进货→清洗水果→切配→分装→送到各门店 DolphinScheduler
前端门店运营 研究新口味、调配配方、接待顾客、做奶茶、收银 Dify / Coze

DolphinScheduler 管的是"后台脏活累活"------数据从哪来、怎么加工、什么时候送。
Dify / Coze 管的是"前台智能体验"------用 AI 大模型和顾客对话、推荐口味、自动下单。

两者配合起来才是一套完整系统:后台数据准时送到,前台 AI 才有料可用。


八、核心差异对比表

维度 DolphinScheduler Dify Coze(扣子)
本质定位 数据任务调度引擎 LLM 应用开发平台 AI Bot 搭建平台
目标用户 数据工程师、运维 开发者、技术团队 零基础个人、运营、产品
「工作流」含义 数据加工流水线 AI 推理流水线 对话逻辑流水线
核心能力 定时跑脚本、ETL调度 RAG 知识库、多模型路由 智能体对话、插件调用
是否涉及AI ❌ 不涉及大模型 ✅ 核心能力 ✅ 核心能力
处理对象 数据表、文件、日志 用户对话、文档、Prompt 用户对话、Bot交互
开源/收费 开源免费(Apache 2.0) 开源免费(社区版) 基础免费+付费订阅
出品方 Apache 基金会 Dify.AI(中国创业公司) 字节跳动
典型任务 spark-submitpython etl.py 调用GPT生成回复RAG检索 回复用户消息调用飞书发通知

九、各自的「工作流」长什么样?

虽然三者的界面都是"拖拽节点 + 连线",但节点里跑的东西完全不同

DolphinScheduler 的工作流(数据处理流水线)

复制代码
 [凌晨2点:从MySQL抽取昨天订单]
           ↓
 [Python脚本清洗重复数据]
           ↓
 [Spark计算销售额、客单价]  ← 大数据计算
           ↓
 [SQL写入数据仓库]
           ↓
 [Python生成Excel报表 → 邮件发送]

每个节点跑的是:Shell命令、Python脚本、Spark任务、SQL语句


Dify 的工作流(AI 推理流水线)

复制代码
 [用户输入:"帮我查一下昨天北京销量"]
           ↓
 [LLM节点:理解意图,提取关键词"北京""昨天""销量"]
           ↓
      ┌────┴────┐
      ↓         ↓
 [知识库检索] [HTTP请求节点]
  查商品文档   调用数据库API
      ↓         ↓
      └────┬────┘
           ↓
 [LLM节点:整合信息,生成自然语言回复]
           ↓
 ["昨天北京地区销售额为128万元,环比增长5%..."]

每个节点跑的是:调用大模型、检索知识库、HTTP请求、代码执行


Coze 的工作流(Bot 对话流水线)

复制代码
 [用户在飞书群 @机器人:"今天天气怎么样?"]
           ↓
 [意图识别节点:判断是天气查询]
           ↓
 [插件节点:调用天气API]
           ↓
 [LLM节点:把API结果转为自然语言]
           ↓
 [回复:"今天北京晴,18-28℃,适合出行!"]

每个节点跑的是:智能体逻辑、插件调用、对话管理


十、它们的关系:互补协作,不是竞争

层次关系图

复制代码
┌────────────────────────────────────────────────┐
│                  用户触点层                       │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐      │
│  │ 微信/飞书 │  │ 网页聊天 │  │  API接口  │      │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘      │
│       └──────────────┼──────────────┘           │
├──────────────────────┼──────────────────────────┤
│              AI 应用层(Dify / Coze)             │
│  ┌──────────────────────────────────────────┐  │
│  │  RAG检索 · LLM对话 · Agent决策 · 插件调用  │  │
│  │          ↑ 需要数据支撑 ↑                  │  │
│  └──────────────────────────────────────────┘  │
├─────────────────────────────────────────────────┤
│            数据调度层(DolphinScheduler)         │
│  ┌──────────────────────────────────────────┐  │
│  │  数据抽取 → 清洗 → 计算 → 入仓 → 建索引     │  │
│  │  定时执行 · 依赖管理 · 失败重试 · 监控告警   │  │
│  └──────────────────────────────────────────┘  │
├─────────────────────────────────────────────────┤
│                  数据存储层                       │
│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐  │
│  │ MySQL  │ │  Hive  │ │  ES    │ │向量数据库│  │
│  └────────┘ └────────┘ └────────┘ └────────┘  │
└─────────────────────────────────────────────────┘

DolphinScheduler 在底层,负责把原始数据加工好。
Dify/Coze 在上层,用加工好的数据提供 AI 智能服务。


十一、真实协作场景举例

场景:某电商公司的智能客服系统

复制代码
┌─────────────────────────────────────────────────┐
│ DolphinScheduler 做的事(凌晨自动跑)              │
│                                                  │
│  [00:00] 从订单库抽取昨日所有订单                   │
│     ↓                                            │
│  [00:30] 清洗数据,剔除测试订单、异常订单             │
│     ↓                                            │
│  [01:00] 更新「商品销量排名」表                     │
│  [01:00] 更新「用户购买偏好」表                     │
│  [01:00] 更新「库存实时状态」表                     │
│     ↓                                            │
│  [02:00] 同步到Dify的知识库 → 让AI能查到最新数据     │
│                                                  │
│  ← 每天自动、准时、不出错                           │
└─────────────────────────────────────────────────┘
                         ↓ 数据就绪
┌─────────────────────────────────────────────────┐
│ Dify / Coze 做的事(用户随时触发)                  │
│                                                  │
│  顾客问:"iPhone 15 Pro 有货吗?今天能发货吗?"       │
│     ↓                                            │
│  LLM理解意图 → RAG从知识库检索iPhone 15库存          │
│     ↓                                            │
│  数据层返回:库存32台,可当日发货                     │
│     ↓                                            │
│  LLM生成回复:"您好!iPhone 15 Pro 目前库存32台,    │
│                 今天16:00前下单可当日发货哦~"        │
│                                                  │
│  ← 智能、自然、实时                                │
└─────────────────────────────────────────────────┘

没有 DolphinScheduler :AI 查到的是昨天的旧库存,可能出现"超卖"。
没有 Dify/Coze:用户查询需要人工客服,24小时排班成本高。


十二、快速判断:你该用哪个?

你的需求 用什么
"每天凌晨自动跑数据清洗脚本" DolphinScheduler
"管理100个Spark任务的依赖和重试" DolphinScheduler
"搭建一个会聊天的AI客服" Dify / Coze
"让AI能根据公司文档回答问题" Dify(RAG能力强)
"5分钟做一个Bot发到飞书群" Coze(零代码最快)
"既要AI客服智能回答,又要后台数据每天自动更新" DolphinScheduler + Dify
"用自然语言说一句话就自动创建数据工作流" DolphinScheduler + DeerFlow

十三、总结:一句话记住三者关系

复制代码
DolphinScheduler = 后厨切菜备料的自动化流水线 🥬→🔪→📦
Dify / Coze     = 前厅招待顾客的AI服务员    💬→🧠→☕

一个是"把数据做熟",一个是"把AI用活"。
真正的企业方案 = DS管后端数据 + Dify/Coze管前端AI。

它们的关系不是"你死我活",而是"一个好汉三个帮"------各司其职,协同作战。

相关推荐
HS_Tiger9 小时前
混沌处理器 - 由韬定律探讨 自研的未来架构设计(设计中的10000条通路85000节点仅作为一个理论验证过程的参考)
人工智能·原创·可复用架构·未来架构
cd_949217219 小时前
工业溶剂行业合规发展新范式:以渥克化学为例,解析正规渠道与全域服务布局
大数据·人工智能
英辰朗迪AI获客10 小时前
AI动态简报之算力基建篇(2026.05.23)
人工智能
YOLO数据集集合10 小时前
自然灾害隐患检测数据集|无人机航拍灾害识别|道路安全巡检|滑坡倒树塌陷落石检测数据集10068期
人工智能·安全·yolo·目标检测·无人机
Aipollo10 小时前
从Nginx到AI网关:网关技术的演进之路
运维·人工智能·nginx
Swift社区10 小时前
模型、工具链与生态:构建可持续的AI开发闭环
人工智能
xiaofan67201310 小时前
2026财务分析师如何提升自身专业能力:从财务建模到AI数据分析的进阶路线
人工智能·数据挖掘·数据分析
Hali_Botebie10 小时前
两种子词分词算法BPE (Byte-Pair Encoding) 和Unigram 区别
人工智能·算法
工业机器人销售服务10 小时前
空调阀板微米级密封涂胶:伯朗特机器人均匀出胶,密封胶层紧实无气泡缺陷
人工智能