任务调度:系统为了自动完成特定任务,在约定的特定时刻去执行任务的过程
分布式调度:
- 分布性:每个部分可以独立部署,服务之间通过网络通信
- 伸缩性:每个部分可以集群部署,动态伸缩扩容
- 高可用
jdk也提供了相关的任务调度功能,如Timer,ScheduledExecutor。
介绍:分布式、易扩展的工作流调度平台
环境准备安装:
- mysql(5.7+)
- jdk(1.8+)
- zookeeper
- hadoop:需要资源上传功能选装
组件:
- masterServer:分布式无中心设计理念,负责工作流任务切分、任务提交(提交给workerServer并分配任务给workerServer)、任务监控,并同时监听其他的masterServer和workServer的健康状态,目的:为了做高可用、容错机制。
- workerServer:分布式务中心设计理念,负责任务的执行和提供日志服务
- zookeeper:masterServer和workerServer节点都通过zookeeper进行集群管理和容错,负责协调整个集群
- alert:提供告警相关服务(电话、邮件等)
- api接口:负责处理前端UI的请求,比如前端查看任务执行、执行的进度等
- UI:前端
流程:
- 定义工作流:用户访问UI定义工作流
- 保存工作流到数据库:通过调用api接口将工作流元数据保存到数据库中
- 工作流切分:保存到数据库后,masterServer要对工作流进行切分,多个masterServer之间的地位是平等的,都可以去切分工作流,竞争资源,加锁
- 分发任务(工作单元):工作流被切分为任务后,masterServer将工作单元分发给workerServer,收到任务后返回给masterServer确认信息ack和response
- 执行任务:Shell、SQL、Spark、MR等
- 执行进度的返回:一边执行任务,一边返回执行进度给masterServer,masterServer会把相应任务的执行状态写入到数据库
部署模式:
- 单机模式
- 伪集群模式:再单台 机器上部署dolphinScheduler各项服务,该模式下master、worker、api、server、logger server等服务都只在一台机器上
- 集群模式:配置多个master和worker
集群部署
初始化数据库
dolphinScheduler元数据存储再关系型数据库中,需要创建相应的数据库和用户
1.创建数据库
CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
2.创建用户
CREATE USER 'dolphinscheduler'@'%' IDENTIFIED BY 'dolphinscheduler';
3.赋予用户相应权限
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%';
flush privileges;
4.修改数据源配置文件
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://hadoop102:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=dolphinscheduler
spring.datasource.password=dolphinscheduler
# hadoop102:主机名
5.拷贝mysql的JDBC驱动到dolphinScheduler的解压目录下的lib中
6.执行数据库初始化脚本(位于dolphinScheduler解压目录下的script目录下)
7.修改运行参数,conf/env/dolphinscheduler)env.sh中的环境变量(百度配置)
8.jdk软链到/usr/bin/java下
9.一键部署配置文件 conf/config/install_config.conf中的各项参数(百度配置)
界面
1.安全中心配置
功能:租户管理、用户管理、告警组管理、worker分组管理、队列管理、令牌管理等功能
用户管理:用来登录dolphinScheduler,配置:用户名,关联的租户、队列、邮件
告警组管理:用于指定告警发送对象
worker分组管理:任务执行时将任务分配给指定的worker组,由改组worker节点执行该任务,默认情况下所有worker都在default组
令牌配置:用于通过接口访问dolphinScheduler各项服务时的用户验证,与第三方服务进行集成,需调其接口才需使用令牌
2.项目管理
工作流基础配置三个模块:
- 工作流定义:用于定义工作流,包括工作流各个节点任务详情和节点依赖关系
- 创建工作流
- 配置任务节点(shell、python、http等)
- 运行标志:是否执行该节点
- 失败重试次数:当执行失败时重试
- 脚本:执行的脚本内容
- 配置依赖关系
- 保存工作流定义:设置流程名和选择执行的租户
- 设置定时,完成上线
- 工作流实例:每执行一次工作流就会生成一个工作流实例
- 查看工作流执行状态(绿色为成功)
- 任务实例:工作流中的每个节点,每执行一次就会生成一个任务实例
- 查看日志
进阶
工作流传参
1.局部传参
- 针对单个任务节点有效的参数,任务系欸但通过${参数名}引用参数值
2.全局参数
- 对整个工作流的所有任务节点都有效的参数,再保存工作流时设置全局参数
3.自定义时间参数
参数 | 说明 |
---|---|
${add_months(yyyyMMdd,12*N)} | 后N年 |
${add_months(yyyyMMdd,-12*N)} | 前N年 |
${add_months(yyyyMMdd,N)} | 后N月 |
${yyyyMMdd+7*N} | 后N周 |
${yyyyMMdd+N} | 后N天 |
${yyyyMMdd-N} | 前N天 |
${HHmmss-N/24} | 前N小时 |
${HHmmss+N/24/60} | 后N分组 |
如:执行的脚本需要一个yyyy-MM-dd的前一天日期的参数:${yyyy-MM-dd-1}
4.引用资源
在Shell脚本节点或python中引用在资源中心写好的脚本资源
5.告警通知
准备邮箱账号开启SMTP服务,获取授权码