【大数据_数仓架构-DolphinScheduler_一次性讲解清楚如何用DolphinScheduler编排数仓任务】
一、概念逐级对照
┌────────────────────────────┬──────────────────────────────────────────────────────────────────┬─────────────────────────────────────────────┐
│ DS 概念 │ Airflow 对应 │ 说明 │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ Project 项目 │ ❌ 无原生概念 → 用 dags/ 子目录 + tags + (可选) RBAC Role │ Airflow 所有 DAG 在同一命名空间,靠约定分组 │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ Workflow 工作流 │ DAG │ 一对一 │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ Task Node 节点 │ Task(Operator/@task) │ 一对一 │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ SUB_PROCESS 子节点 │ TaskGroup(同 DAG 内复用)/ TriggerDagRunOperator(跨 DAG 触发) │ SubDagOperator 已废弃,别用 │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ DEPENDENT 节点(跨流依赖) │ ExternalTaskSensor 或 Datasets(数据感知调度,推荐) │ 这是迁移重点 │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ 全局/项目参数 │ Variables + Jinja 模板({{ ds }} = 业务日期) │ DS 的 $[yyyyMMdd] ≈ {{ ds_nodash }} │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ Task Group 并发组 │ Pool(限并发,保护源库) │ │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ 租户 Tenant │ Queue + Connection + Worker │ │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ 告警/重试 │ DAG/Task 的 retries、on_failure_callback │ 写在代码里 │
└────────────────────────────┴──────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────┘
ODS 接入、DWD/DWS 建模、ADS 分析是不同团队,按层建项目刚好对齐权限;
若同一个团队全包,5 个项目反而增加跨项目 DEPENDENT 的管理成本——这点要结合组织结构
–项目ODS
–工作流 ODS_交易
–工作流 ODS_履约
–工作流 ODS_会员
–项目DIM
–工作流 dim_用户
–工作流 dim_店铺
–工作流 dim_城市
–项目DWD
–工作流 dwd_交易
–工作流 dwd_履约
–工作流 dwd_会员
–项目DWS 【跨域】
–工作流 dws_用户主题
–工作流 dws_店铺主题
–工作流 dws_商品主题
–工作流 dws_履约主题
–项目ADS 【跨主题】
–工作流 ads_经营看板
–工作流 ads_会员运营类
–工作流 ads_商家服务类
–工作流 ads_履约监控类
Airflow:
Airflow 没有 Project,所以"5 个项目"变成目录分层 + 统一 tag/owner:
dags/
├── ods/
│ ├── ods_trade.py # DAG(dag_id=“ods_trade”, tags=[“ods”])
│ ├── ods_fulfillment.py
│ └── ods_member.py
├── dim/
│ ├── dim_user.py
│ ├── dim_shop.py
│ └── dim_city.py
├── dwd/
│ ├── dwd_trade.py # 依赖 ods_trade → ExternalTaskSensor / Dataset
│ ├── dwd_fulfillment.py
│ └── dwd_member.py
├── dws/
│ ├── dws_user.py # 跨域: 等 dwd_trade + dwd_member
│ ├── dws_shop.py
│ ├── dws_item.py
│ └── dws_fulfillment.py
└── ads/
├── ads_ops_board.py # 跨主题: 等多个 dws
├── ads_member_ops.py
├── ads_merchant_svc.py
└── ads_fulfillment_mon.py
"项目"边界 = 目录 + tags=[“dws”] + owner + RBAC(按 tag/folder 配权限角色,对齐 ODS/DWD/ADS 不同团队)。
