Apache DolphinScheduler 项目管理实战:项目列表、创建、WorkerGroup 授权与概览统计全解析
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
本文以 Apache DolphinScheduler 的 Project(项目管理)功能为主线,系统讲解项目管理页面的术语体系、项目列表页字段与操作、项目创建流程、WorkerGroup 授权机制以及项目概览的三大统计指标,并结合仓库中的前端 UI 代码与后端 REST 接口源码,说明每个操作的实现原理与权限约束。读完本文,你将能完整掌握在 DolphinScheduler 中从创建项目、授权 WorkerGroup 到查看项目运行概览的完整实操链路。
一、项目管理核心术语速览
在进入操作步骤之前,先建立统一的概念基础。Apache DolphinScheduler 的项目(Project)是其全部编排能力的逻辑容器,围绕项目存在以下核心术语:
| 术语 | 说明 |
|---|---|
| DAG | 工作流中的任务以有向无环图(Directed Acyclic Graph)的形式组装,从入度为零的节点开始进行拓扑遍历,直到不再存在后继节点为止。 |
| 工作流定义(Workflow Definition) | 通过拖拽任务节点并建立任务节点关联(DAG)形成的可视化产物。 |
| 工作流实例(Workflow Instance) | 工作流定义的实例化产物,可通过手动启动或定时调度生成,流程定义每次运行都会产生一个工作流实例。 |
| 工作流关系(Workflow Relation) | 展示项目内所有工作流的动态状态关系。 |
| 任务(Task) | 工作流中的离散动作单元。DolphinScheduler 支持 SHELL、SQL、SUB_WORKFLOW、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖)等多种任务类型,并计划支持动态插件扩展;SUB_WORKFLOW 本身也是一份可独立启动执行的流程定义。 |
| 任务实例(Task Instance) | 流程定义中任务节点的实例化,用于标识具体任务的执行状态。 |
从仓库源码看,任务类型在前端统一由 task-type.ts 维护,任务插件体系位于 dolphinscheduler-task-plugin 目录,每种任务类型对应一个独立模块(如dolphinscheduler-task-shell、dolphinscheduler-task-spark等),印证了"任务类型支持动态插件扩展"的设计。
二、项目列表页:字段构成与操作入口
进入项目管理页面后,可以看到当前用户有权限访问的全部项目列表。列表以表格形式呈现,其字段构成在前端 use-table.ts 中定义:
- 项目名称(project_name):以可点击链接形式展示,点击后跳转到
/projects/${code}进入项目首页; - 所属用户(owned_users):项目的拥有者;
- 工作流定义数(workflow_define_count):该项目下已定义的工作流数量;
- 描述(description):项目备注说明;
- 创建时间(create_time):格式化为
yyyy-MM-dd HH:mm:ss; - 更新时间(update_time):同上格式;
- 操作(operation):编辑、WorkerGroup 授权、删除三个按钮。
列表页同时提供搜索框(按项目名称模糊检索)、分页组件(每页 10/30/50 条可选),并通过queryProjectListPaging请求/projects接口拉取数据,具体实现见 projects/index.ts。
页面交互层的关键细节(见 list/index.tsx):
- 编辑:点击编辑按钮会打开项目弹窗并预填当前行数据;
- WorkerGroup 授权:仅管理员(
userType === 'ADMIN_USER')可见该按钮; - 删除:使用
NPopconfirm弹出二次确认,确认后调用deleteProject(row.code),删除成功后若当前页仅剩一条数据且页号大于 1 会自动回退一页(见 use-table.ts)。
三、创建项目:表单字段与校验规则
创建项目是使用 DolphinScheduler 的第一步,操作路径如下:
- 点击左侧菜单
项目管理进入项目管理页面; - 点击
创建项目按钮; - 在弹窗中填写项目名称与项目描述;
- 点击
提交完成创建。
创建/编辑弹窗由 project-modal.tsx 实现,其表单包含三个字段:
| 字段 | 说明 | 约束 |
|---|---|---|
| 项目名称 | 项目唯一标识 | 必填,空值校验不通过无法提交 |
| 所属用户 | 项目拥有者 | 自动填充为当前登录用户,输入框为只读(disabled) |
| 项目描述 | 项目的补充说明 | 可选,多行文本输入 |
表单校验规则定义在 use-form.ts:projectName和userName均为必填,触发时机为input与blur;校验通过后,statusRef === 0时调用createProject(POST),否则调用updateProject(PUT)提交数据。提交期间按钮进入 loading 状态,防止重复提交。
对应后端接口在 ProjectController.java 中定义:
POST /projects:创建项目(第 86 行起);PUT /projects/{code}:更新项目;DELETE /projects/{code}:删除项目;GET /projects:分页查询项目列表。
其中删除操作对应后端权限校验方法checkProjectAndAuthThrowException(见 ProjectServiceImpl.java),仅持有PROJECT_DELETE权限的用户才能执行删除,体现了项目级的细粒度权限控制。
四、编辑与删除项目:操作注意事项
- 编辑项目:在项目列表中点击"编辑"图标,弹窗会预填当前项目的名称、所属用户与描述,修改后提交即调用
PUT /projects/{code}更新。 - 删除项目:点击删除图标后,前端弹出确认框,确认后调用
DELETE /projects/{code}。注意删除会连带影响项目下的工作流定义与实例,属于不可逆操作,务必确认项目已不再需要。
从权限模型看,项目操作区分了查看(PROJECT)、删除(PROJECT_DELETE)等不同级别的权限,且授权不仅限于项目拥有者——管理员可以将项目授权给其他用户,这也是"项目概览中的工作流定义统计包含管理员授予的项目"这一说法的由来。
五、项目 WorkerGroup 授权:控制任务可用的 Worker 组
WorkerGroup(Worker 分组)用于对执行任务的 Worker 节点进行逻辑分组。项目级 WorkerGroup 授权决定了该项目下的工作流可以调度到哪些 Worker 组上执行。
操作步骤:
- 在项目管理页面点击某项目行的
WorkerGroup 授权按钮(仅管理员可见,见 use-table.ts); - 在弹窗中选择目标 WorkerGroup;
- 授权成功后,该项目即可访问所选 WorkerGroup,其工作流任务将只能被调度到已授权分组内的 Worker 节点执行。
实现细节(见 use-worker-group.ts 与 worker-group-modal.tsx):
- 弹窗使用
NTransfer(穿梭框)组件,左侧为全量 WorkerGroup 候选,右侧为当前项目已授权的 WorkerGroup; - 打开弹窗时调用
queryAllWorkerGroups加载候选列表,并调用queryWorkerGroupsByProjectCode(projectCode)回显该项目已授权的 WorkerGroup; - 提交时调用
assignWorkerGroups接口,将选中的 WorkerGroup 以逗号分隔的字符串上传(空数组时传空字符串表示清空授权)。
六、项目概览:三大统计指标解析
点击项目名称链接进入项目首页后,可看到项目运行状况的总览面板。其页面结构由 overview/index.tsx 实现,采用两列栅格布局:上方并排展示"任务状态统计"与"流程状态统计"两个状态卡片,下方全宽展示"工作流定义统计"卡片。
6.1 任务状态统计
在指定时间范围内,统计项目中所有任务实例各状态的数量,包含:提交成功、运行中、准备暂停、暂停、准备停止、停止、失败、成功、需要容错、Kill、等待线程等状态。
前端通过useTaskState(见 use-task-state.ts)请求任务实例状态分布数据,同时以表格和图表(饼图/柱状图)两种形式呈现,并支持通过日期选择器(默认范围为今日零点至今)切换统计时间窗口。
6.2 流程状态统计
在指定时间范围内,统计项目中所有工作流实例各状态的数量,状态集合与任务状态统计一致(提交成功、运行中、准备暂停、暂停、准备停止、停止、失败、成功、需要容错、Kill、等待线程)。实现上对应 use-workflow-state.ts。
6.3 工作流定义统计
统计当前用户创建以及被管理员授予的项目下的工作流定义数量,对应 definition-card.tsx。与上述两个"运行态"统计不同,它反映的是项目的工作流资产规模,而非运行结果。
七、源码级透视:项目管理的调用链与权限模型
将前端操作与后端接口串联起来,可以完整还原项目管理的调用链:
- 列表查询:前端
queryProjectListPaging→GET /projects→ProjectController.queryProjectListPaging→ProjectServiceImpl.queryProjectListPaging(ProjectServiceImpl.java),按searchVal模糊匹配、pageNo/pageSize分页返回; - 创建项目:前端
createProject→POST /projects→ProjectServiceImpl.createProject(同上文件第 100 行),写入项目记录; - 权限校验:查询、更新、删除等操作统一通过
checkProjectAndAuthThrowException(loginUser, project, permission)校验当前登录用户对目标项目是否持有对应权限,未授权则直接抛出异常; - 授权查询:
queryAuthorizedUser(第 541 行)用于查询项目已授权的用户列表,支撑用户/项目双向授权体系。
从整体架构看,项目管理位于 Web UI 层(dolphinscheduler-ui)与 API 服务层(dolphinscheduler-api)的协作边界上:UI 层负责交互与校验,API 层负责权限控制与数据持久化,二者通过 RESTful 接口解耦,这也与 DolphinScheduler 前后端分离的总体设计一致。
八、小结
项目管理是 Apache DolphinScheduler 一切编排工作的起点:通过项目列表页完成项目的创建、编辑、删除与检索,通过 WorkerGroup 授权约束任务的调度范围,通过项目概览实时掌握任务实例与工作流实例的运行状态分布。理解项目模型与权限体系,是后续使用工作流定义、调度编排、任务实例管理等高级功能的基础。更多操作细节可参考仓库中的 项目管理页面源码 与 项目接口定义,结合源码阅读可对每个按钮、每个字段背后的实现有更精确的把握。
【免费下载链接】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),仅供参考