1. 简介
1.1 介绍
Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。
Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。 DolphinScheduler 以 DAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。
1.2 特性
简单易用
- 可视化 DAG: 用户友好的,通过拖拽定义工作流的,运行时控制工具
- 模块化操作: 模块化有助于轻松定制和维护。
丰富的使用场景
- 支持多种任务类型: 支持Shell、MR、Spark、SQL等10余种任务类型,支持跨语言,易于扩展
- 丰富的工作流操作: 工作流程可以定时、暂停、恢复和停止,便于维护和控制全局和本地参数。
High Reliability
- 高可靠性: 去中心化设计,确保稳定性。 原生 HA 任务队列支持,提供过载容错能力。 DolphinScheduler 能提供高度稳健的环境。
High Scalability
- 高扩展性: 支持多租户和在线资源管理。支持每天10万个数据任务的稳定运行。
1.3 名词解释
DAG: 全称 Directed Acyclic Graph,简称 DAG。工作流中的 Task 任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:
流程定义:通过拖拽任务节点并建立任务节点的关联所形成的可视化DAG
流程实例:流程实例是流程定义的实例化,可以通过手动启动或定时调度生成。每运行一次流程定义,产生一个流程实例
任务实例:任务实例是流程定义中任务节点的实例化,标识着某个具体的任务
任务类型:目前支持有 SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中 SUB_PROCESS类型的任务需要关联另外一个流程定义,被关联的流程定义是可以单独启动执行的
调度方式:系统支持基于 cron 表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。 其中 恢复被容错的工作流 和 恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用
定时调度:系统采用 quartz 分布式调度器,并同时支持cron表达式可视化的生成
依赖:系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖
优先级 :支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出
邮件告警:支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知
失败策略:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续是指不管并行运行任务的状态,直到流程失败结束。结束是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束
补数:补历史数据,支持区间并行和串行两种补数方式,其日期选择方式包括日期范围和日期枚举两种
2. 部署&快速上手
- 安装并启动DS集群
1 | 1. 解压 |
- 构建您的第一个工作流程
您可以使用默认用户名/密码 http://192.168.100.200:12345/dolphinscheduler/ui 登录 dolphinscheduler 是“admin/dolphinscheduler123”。
- 创建租户
Tenant是使用DolphinScheduler时绕不开的一个概念,所以先简单介绍一下tenant的概念。
登录 DolphinScheduler 名为 admin 的帐户在 dolphinscheduler 中称为 user。 为了更好的控制系统资源,DolphinScheduler引入了概念租户,用于执行任务。
简述如下:
- 用户:登录web UI,在web UI中进行所有操作,包括工作流管理和租户创建。
- Tenant:任务的实际执行者,A Linux user for DolphinScheduler worker。
我们可以在 DolphinScheduler Security -> Tenant Manage
页面创建租户。
注意:如果没有关联租户,则会使用默认租户,默认租户为default,会使用程序启动用户执行任务。
- 将租户分配给用户
正如我们上面在创建租户中谈到的,用户只能运行任务除非用户被分配给租户。
我们可以在 DolphinScheduler 的“安全 -> 用户管理”页面中将租户分配给特定用户。
在我们创建一个租户并将其分配给一个用户之后,我们可以开始创建一个 DolphinScheduler 中的简单工作流程。
- 创建项目
但是在 DolphinScheduler 中,所有的工作流都必须属于一个项目,所以我们需要首先创建一个项目。
我们可以通过单击在 DolphinScheduler Project
页面中创建一个项目 “创建项目” 按钮。
- 创建工作流
现在我们可以为项目“tutorial”创建一个工作流程。 点击我们刚刚创建的项目,转到“工作流定义”页面,单击“创建工作流”按钮,我们将重定向到工作流详细信息页面。
- 创建任务
我们可以使用鼠标从工作流画布的工具栏中拖动要创建的任务。 在这种情况下,我们创建一个 Shell
任务。 输入任务的必要信息,对于这个简单的工作流程 我们只需将属性“节点名称”填充为“脚本”即可。之后,我们可以单击“保存”按钮将任务保存到工作流中。 我们创建另一个任务使用相同的方式。
- 设置任务依赖
因此,我们有两个具有不同名称和命令的不同任务在工作流中运行。 这当前工作流中唯一缺少的是任务依赖性。 我们可以使用添加依赖,鼠标将箭头从上游任务拖到下游 然后松开鼠标。您可以看到从上游创建了两个任务之间带有箭头的链接任务交给下游一个。 最后,我们可以点击右上角的“保存”按钮保存工作流,不要忘记填写工作流名称。
- 运行工作流
全部完成后,我们可以通过单击“在线”然后单击“运行”按钮来运行工作流工作流列表。 如果您想查看工作流实例,只需转到 “工作流实例” 页面,可以看到工作流实例正在运行,状态为Executing
。
- 查看日志
如需查看任务日志,请从工作流实例中点击工作流实例列表,然后找到要查看日志的任务,右击鼠标选择View Log
从上下文对话框中,您可以看到任务的详细日志。
您可以在任务中打印 Hello DolphinScheduler
和 Ending...
这和我们一样定义 在创建任务中。
3. 功能介绍
3.1 项目管理
3.1.1 项目列表
- 批量任务定义
批量任务定义允许您在基于任务级别而不是在工作流中操作修改任务。再此之前,我们已经有了工作流级别的任务编辑器,你可以在工作流定义 单击特定的工作流,然后编辑任务的定义。当您想编辑特定的任务定义但不记得它属于哪个工作流时,这是令人沮丧的。所以我们决定在 任务
菜单下添加 任务定义
视图。
在该视图中,您可以通过单击 操作
列中的相关按钮来进行创建、查询、更新、删除任务定义。最令人兴奋的是您可以通过通配符进行全部任务查询,当您只 记得任务名称但忘记它属于哪个工作流时是非常有用的。也支持通过任务名称结合使用 任务类型
或 工作流程名称
进行查询。
- 实时任务定义
实时任务定义在工作流定义中创建,在任务定义页面可以进行修改和执行。
点击实时任务执行,检查执行参数后点击确认,即可提交实时任务。
3.1.2 工作流定义
3.1.2.1 创建工作流定义
点击项目管理->工作流->工作流定义,进入工作流定义页面,点击“创建工作流”按钮,进入工作流DAG编辑页面,如下图所示:
工具栏中拖拽 到画板中,新增一个Shell任务,如下图所示:
添加 Shell 任务的参数设置:
- 填写“节点名称”,“描述”,“脚本”字段;
- “运行标志”勾选“正常”,若勾选“禁止执行”,运行工作流不会执行该任务;
- 选择“任务优先级”:当 worker 线程数不足时,级别高的任务在执行队列中会优先执行,相同优先级的任务按照先进先出的顺序执行;
- 超时告警(非必选):勾选超时告警、超时失败,填写“超时时长”,当任务执行时间超过超时时长,会发送告警邮件并且任务超时失败;
- 资源(非必选):资源文件是资源中心->文件管理页面创建或上传的文件,如文件名为
test.sh
,脚本中调用资源命令为sh test.sh
。注意调用需要使用资源的全路径; - 自定义参数(非必填);
- 点击”确认添加”按钮,保存任务设置。
配置任务之间的依赖关系: 点击任务节点的右侧加号连接任务;如下图所示,任务 Node_B 和任务 Node_C 并行执行,当任务 Node_A 执行完,任务 Node_B、Node_C 会同时执行。
实时任务的依赖关系: 若DAG中包含了实时任务的组件,则实时任务的关联关系显示为虚线,在执行工作流实例的时候会跳过实时任务的执行
删除依赖关系: 点击右上角”箭头”图标,选中连接线,点击右上角”删除”图标,删除任务间的依赖关系。
保存工作流定义: 点击”保存“按钮,弹出”设置DAG图名称”弹框,如下图所示,输入工作流定义名称,工作流定义描述,设置全局参数(选填,参考全局参数),点击”添加”按钮,工作流定义创建成功。
其他类型任务,请参考 任务节点类型和参数设置。
执行策略
并行
:如果对于同一个工作流定义,同时有多个工作流实例,则并行执行工作流实例。串行等待
:如果对于同一个工作流定义,同时有多个工作流实例,则并行执行工作流实例。串行抛弃
:如果对于同一个工作流定义,同时有多个工作流实例,则抛弃后生成的工作流实例并杀掉正在跑的实例。串行优先
:如果对于同一个工作流定义,同时有多个工作流实例,则按照优先级串行执行工作流实例。
3.1.2.2 工作流定义操作功能
点击项目管理->工作流->工作流定义,进入工作流定义页面,如下图所示:
工作流定义列表的操作功能如下:
- 编辑: 只能编辑”下线”的工作流定义。工作流DAG编辑同创建工作流定义。
- 上线: 工作流状态为”下线”时,上线工作流,只有”上线”状态的工作流能运行,但不能编辑。
- 下线: 工作流状态为”上线”时,下线工作流,下线状态的工作流可以编辑,但不能运行。
- 运行: 只有上线的工作流能运行。运行操作步骤见运行工作流
- 定时: 只有上线的工作流能设置定时,系统自动定时调度工作流运行。创建定时后的状态为”下线”,需在定时管理页面上线定时才生效。定时操作步骤见工作流定时
- 定时管理: 定时管理页面可编辑、上线/下线、删除定时。
- 删除: 删除工作流定义。在同一个项目中,只能删除自己创建的工作流定义,其他用户的工作流定义不能进行删除,如果需要删除请联系创建用户或者管理员。
- 下载: 下载工作流定义到本地。
- 树形图: 以树形结构展示任务节点的类型及任务状态,如下图所示:
3.1.2.3 运行工作流
- 点击项目管理->工作流->工作流定义,进入工作流定义页面,如下图所示,点击”上线”按钮,上线工流。
- 点击”运行“按钮,弹出启动参数设置弹框,如下图所示,设置启动参数,点击弹框中的”运行”按钮,工作流开始运行,工作流实例页面生成一条工作流实例。
工作流运行参数说明:
失败策略:当某一个任务节点执行失败时,其他并行的任务节点需要执行的策略。”继续“表示:某一任务失败后,其他任务节点正常执行;”结束“表示:终止所有正在执行的任务,并终止整个流程。
通知策略:当流程结束,根据流程状态发送流程执行信息通知邮件,包含任何状态都不发,成功发,失败发,成功或失败都发。
流程优先级:流程运行的优先级,分五个等级:最高(HIGHEST),高(HIGH),中(MEDIUM),低(LOW),最低(LOWEST)。当 master 线程数不足时,级别高的流程在执行队列中会优先执行,相同优先级的流程按照先进先出的顺序执行。
Worker 分组:该流程只能在指定的 worker 机器组里执行。默认是 Default,可以在任一 worker 上执行。
通知组:选择通知策略||超时报警||发生容错时,会发送流程信息或邮件到通知组里的所有成员。
启动参数: 在启动新的流程实例时,设置或覆盖全局参数的值。
补数:指运行指定日期范围内的工作流定义,根据补数策略生成对应的工作流实例,补数策略包括串行补数、并行补数 2 种模式。
日期可以通过页面选择或者手动输入,日期范围是左关右关区间(startDate <= N <= endDate)
- 串行补数:指定时间范围内,从开始日期至结束日期依次执行补数,依次生成多条流程实例;点击运行工作流,选择串行补数模式:例如从7月 9号到7月10号依次执行,依次在流程实例页面生成两条流程实例。
- 并行补数: 指定时间范围内,同时进行多天的补数,同时生成多条流程实例。手动输入日期:手动输入以逗号分割日期格式为
yyyy-MM-dd HH:mm:ss
的日期。点击运行工作流,选择并行补数模式:例如同时执行7月9号到7月10号的工作流定义,同时在流程实例页面生成两条流程实例(执行策略为串行时流程实例按照策略执行)。
- 并行度:是指在并行补数的模式下,最多并行执行的实例数。例如同时执行7月6号到7月10号的工作流定义,并行度为2,那么流程实例为:
- 依赖模式:是否触发下游依赖节点依赖到当前工作流的工作流实例的补数(要求当前补数的工作流实例的定时状态为已上线,只会触发下游直接依赖到当前工作流的补数)。
日期选择:
- 通过页面选择日期:
- 手动输入:
补数与定时配置的关系:
未配置定时
或已配置定时并定时状态下线
:根据所选的时间范围结合定时默认配置(每天0点)进行补数,比如该工作流调度日期为7月7号到7月10号,流程实例为:
已配置定时并定时状态上线
:根据所选的时间范围结合定时配置进行补数,比如该工作流调度日期为7月7号到7月10号,配置了定时(每日凌晨5点运行),流程实例为:
3.1.2.4 单独运行任务
- 右键选中任务,点击”启动”按钮(只有已上线的任务才能点击运行)
- 弹出启动参数设置弹框,参数说明同运行工作流
3.1.2.5 工作流定时
创建定时:点击项目管理->工作流->工作流定义,进入工作流定义页面,上线工作流,点击”定时”按钮,弹出定时参数设置弹框,如下图所示:
选择起止时间。在起止时间范围内,定时运行工作流;不在起止时间范围内,不再产生定时工作流实例。
添加一个每隔 5 分钟执行一次的定时,如下图所示:
失败策略、通知策略、流程优先级、Worker 分组、通知组、收件人、抄送人同工作流运行参数。
点击”创建”按钮,创建定时成功,此时定时状态为”下线“,定时需上线才生效。
定时上线:点击”定时管理”按钮,进入定时管理页面,点击”上线”按钮,定时状态变为”上线”,如下图所示,工作流定时生效。
3.1.2.6 导入工作流
点击项目管理->工作流->工作流定义,进入工作流定义页面,点击”导入工作流”按钮,导入本地工作流文件,工作流定义列表显示导入的工作流,状态为下线。
3.2 任务类型
DolphinScheduler | 文档中心 -任务类型(apache.org)
3.3 参数
DolphinScheduler | 文档中心-参数 (apache.org)
3.4 数据源中心
DolphinScheduler | 文档中心-数据源中心 (apache.org)
4. 部署指南
DolphinScheduler | 文档中心 -部署指南(apache.org)