序言
整理下DolphinScheduler的使用
参考资料:
简介
Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。
Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。 DolphinScheduler 以 DAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。-------是任务的一个编排工具,可即工作流[email protected]
DAG: 全称 Directed Acyclic Graph,即有向无环图。工作流中的 Task 任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:
特性
简单易用
可视化 DAG: 用户友好的,通过拖拽定义工作流的,运行时控制工具
模块化操作: 模块化有助于轻松定制和维护。
丰富的使用场景
支持多种任务类型: 支持Shell、MR、Spark、SQL等10余种任务类型,支持跨语言,易于扩展
丰富的工作流操作: 工作流程可以定时、暂停、恢复和停止,便于维护和控制全局和本地参数。
High Reliability
高可靠性: 去中心化设计,确保稳定性。 原生 HA 任务队列支持,提供过载容错能力。 DolphinScheduler 能提供高度稳健的环境。
High Scalability
高扩展性: 支持多租户和在线资源管理。支持每天10万个数据任务的稳定运行。
搭建要求
Linux 操作系统版本要求
操作系统 |
版本 |
Red Hat Enterprise Linux |
7.0 及以上 |
CentOS |
7.0 及以上 |
Oracle Enterprise Linux |
7.0 及以上 |
Ubuntu LTS |
16.04 及以上 |
注意: 以上 Linux 操作系统可运行在物理服务器以及 VMware、KVM、XEN 主流虚拟化环境上
服务器建议配置
DolphinScheduler 支持运行在 Intel x86-64 架构的 64 位通用硬件服务器平台。对生产环境的服务器硬件配置有以下建议:
生产环境
CPU |
内存 |
硬盘类型 |
网络 |
实例数量 |
4核+ |
8 GB+ |
SAS |
千兆网卡 |
1+ |
注意:
以上建议配置为部署 DolphinScheduler 的最低配置,生产环境强烈推荐使用更高的配置
硬盘大小配置建议 50GB+ ,系统盘和数据盘分开
网络要求
DolphinScheduler正常运行提供如下的网络端口配置:
组件 |
默认端口 |
说明 |
MasterServer |
5678 |
非通信端口,只需本机端口不冲突即可 |
WorkerServer |
1234 |
非通信端口,只需本机端口不冲突即可 |
ApiApplicationServer |
12345 |
提供后端通信端口 |
注意:
MasterServer 和 WorkerServer 不需要开启网络间通信,只需本机端口不冲突即可
管理员可根据实际环境中 DolphinScheduler 组件部署方案,在网络侧和主机侧开放相关端口
客户端 Web 浏览器要求
DolphinScheduler 推荐 Chrome 以及使用 Chromium 内核的较新版本浏览器访问前端可视化操作界面
环境搭建
Standalone
JDK:下载JDK (1.8+),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中。如果你的环境中已存在,可以跳过这步。
二进制包:在下载页面下载 DolphinScheduler 二进制包
tar -zxvf apache-dolphinscheduler-3.1.4-bin.tar.gz
cd apache-dolphinscheduler-3.1.4-bin
cd bin
./dolphinscheduler-daemon.sh start standalone-server
账号密码:admin/dolphinscheduler123
登录后展示:
操作介绍
首先是使用超级管理员创建用户,而不是用超级管理员来添加业务任务
安全中心
安全中心就是用于创建账号的地方.安全中心只有管理员账户才有权限操作,
Yarn队列管理
此处的队列对应的是Yarn调度器的资源队列。故队列概念只对跑在Yarn上的任务类型有效
队列是在执行 spark、mapreduce 等程序,需要用到“队列”参数时使用的。
此处可不创建队列。
租户管理
租户对应的是 Linux 的用户,用于 worker 提交作业所使用的用户。如果 linux 没有这个用户,则会导致任务运行失败。你可以通过修改 worker.properties 配置文件中参数 worker.tenant.auto.create=true 实现当 linux 用户不存在时自动创建该用户。worker.tenant.auto.create=true 参数会要求 worker 可以免密运行 sudo 命令
租户编码:租户编码是 Linux上 的用户,唯一,不能重复
用户管理
户对应的是DolphinScheduler的用户,用于登录DolphinScheduler
用户分为管理员用户和普通用户
管理员有授权和用户管理等权限,没有创建项目和工作流定义的操作的权限。
普通用户可以创建项目和对工作流定义的创建,编辑,执行等操作。
如果该用户切换了租户,则该用户所在租户下所有资源将复制到切换的新租户下。
告警组管理
告警组是在启动时设置的参数,在流程结束以后会将流程的状态和其他信息以邮件形式发送给告警组。
管理员进入安全中心->告警组管理页面,点击“创建告警组”按钮,创建告警组。
告警实例管理
告警方式的设置,有多种方式,这里使用的是Email的方式.告警组就需要选择告警实例才能进行告警[email protected]
Worker分组管理
每个 worker 节点都会归属于自己的 worker 分组,默认分组为 default。
在任务执行时,可以将任务分配给指定 worker 分组,最终由该组中的 worker 节点执行该任务。
通过配置文件给虚拟机设置分组
打开要设置分组的 worker 节点上的 worker-server/conf/application.yaml 配置文件. 修改 worker 配置下的 groups 参数.
groups 参数的值为 worker 节点对应的分组名称,默认为 default。
如果该 worker 节点对应多个分组,则用连字符列出,示范如下:
worker:
......
groups:
- default
- group1
- group2
......
通过管理界面给work进行分组
环境管理
在线配置 worker 运行环境,一个 worker 可以指定多个环境,每个环境等价于 dolphinscheduler_env.sh 文件.
默认环境为dolphinscheduler_env.sh文件.--------------如果不设置则执行该配置文件中的环境配置命令[email protected]
在任务执行时,可以将任务分配给指定 worker 分组,根据 worker 分组选择对应的环境,最终由该组中的 worker 节点执行环境后执行该任务.------环境的执行是在将来具体创建任务的时候后才执行
环境配置等价于dolphinscheduler_env.sh文件内配置
在工作流定义中创建任务节点选择 worker 分组和 worker 分组对应的环境,任务执行时 worker 会先执行环境在执行任务.-------当具体任务要在worker节点中执行的时候会先执行选择的环境配置
集群管理
每个工作流可以绑定零到若干个集群用来支持多集群,目前先用于k8s。
创建和授权后,k8s命名空间和工作流会增加关联集群的功能。每一个集群会有独立的工作流和任务实例独立运行。
命名空间管理
先把k8s集群连接的配置录入 database 的表 t_ds_k8s给批次使用后续移除,namespace的创建现在通过下拉选择集群.
创建和授权后,在相关k8s任务选择命名空间时下拉可选,如果k8s集群名字是ds_null_k8s是测试模式,不会真正操作集群.
项目管理
项目管理才是项目的业务核心,用于我们实际的操作.
首先使用上面我们创建非管理员账户登录,然后创建一个项目
点击项目名称,进入如下的界面:
工作流->工作流定义
点击项目管理->工作流->工作流定义,进入工作流定义页面,点击“创建工作流”按钮,进入工作流DAG编辑页面,如下图所示:
如下是模拟创建一个shell的一个简单工作流
如上shell任务的具体含义如下所示:----当然不同的任务的参数是有区别的
填写“节点名称”,“描述”,“脚本”字段;
“运行标志”勾选“正常”,若勾选“禁止执行”,运行工作流不会执行该任务;
选择“任务优先级”:当 worker 线程数不足时,级别高的任务在执行队列中会优先执行,相同优先级的任务按照先进先出的顺序执行;
超时告警(非必选):勾选超时告警、超时失败,填写“超时时长”,当任务执行时间超过超时时长,会发送告警邮件并且任务超时失败;
资源(非必选):资源文件是资源中心->文件管理页面创建或上传的文件,如文件名为 test.sh,脚本中调用资源命令为 sh test.sh。注意调用需要使用资源的全路径;
自定义参数(非必填);
点击"确认添加"按钮,保存任务设置。
最终拖拽创建3个Shell任务后,点击加号把他们连接起来,行程有向无环图
若DAG中包含了实时任务的组件,则实时任务的关联关系显示为虚线,在执行工作流实例的时候会跳过实时任务的执行--------------------实时任务显示虚线,且执行中会跳过实时任务????
然后点击保存按钮即可
执行策略
并行:如果对于同一个工作流定义,同时有多个工作流实例,则并行执行工作流实例。
串行等待:如果对于同一个工作流定义,同时有多个工作流实例,则串行执行工作流实例。
串行抛弃:如果对于同一个工作流定义,同时有多个工作流实例,则抛弃后生成的工作流实例并杀掉正在跑的实例。
串行优先:如果对于同一个工作流定义,同时有多个工作流实例,则按照优先级串行执行工作流实例。
工作流操作
如下所示,创建好工作流后,能操作的功能如下图所示;
编辑: 只能编辑"下线"的工作流定义。工作流DAG编辑同创建工作流定义。
上线: 工作流状态为"下线"时,上线工作流,只有"上线"状态的工作流能运行,但不能编辑。
下线: 工作流状态为"上线"时,下线工作流,下线状态的工作流可以编辑,但不能运行。
运行: 只有上线的工作流能运行。运行操作步骤见运行工作流
定时: 只有上线的工作流能设置定时,系统自动定时调度工作流运行。创建定时后的状态为"下线",需在定时管理页面上线定时才生效。定时操作步骤见工作流定时
定时管理: 定时管理页面可编辑、上线/下线、删除定时。
删除: 删除工作流定义。在同一个项目中,只能删除自己创建的工作流定义,其他用户的工作流定义不能进行删除,如果需要删除请联系创建用户或者管理员。
下载: 下载工作流定义到本地。
树形图: 以树形结构展示任务节点的类型及任务状态
运行工作流
点击上线
点击运行
点击运行后弹出启动设置参数界面
失败策略:当某一个任务节点执行失败时,其他并行的任务节点需要执行的策略。”继续“表示:某一任务失败后,其他任务节点正常执行;”结束“表示:终止所有正在执行的任务,并终止整个流程。
通知策略:当流程结束,根据流程状态发送流程执行信息通知邮件,包含任何状态都不发,成功发,失败发,成功或失败都发。
流程优先级:流程运行的优先级,分五个等级:最高(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,那么流程实例为:
多种任务的配置信息参考
关于补数运行
在运行工作流的时候,选择了补数,就可以选择过去的时间,也可以选择将来的时间.程序就会马上根据所选择的时间马上运行----这里不是时间段,而是多个时间点,我们可以设置多个时间点.
串行就是一个一个的运行你所选择的时间,并行就是一起运行你的多个时间.
个人感觉作用就是,你可以模拟一个过去或者将来的时间.然后在模拟的时间上马上去运行工作流[email protected]