分布式调度系统设计与实现(三)

  |   0 评论   |   2,360 浏览

下面介绍赫拉任务调度系统的使用

文档管理

image.png

  1. A:当前用户有权限看到的模块

  2. B:列出当前用户所有有权限的Worker,并包含可以操作的用户,每一个根节点代表一条“doAs {...} on Worker {...}”,每一颗子树映射了一个文件夹

  3. C:当用户点击可编辑文档或可执行文档时,区域C显示了当前文档的内容,可以编辑

  4. D:控制台

文档分类:

可执行文档:shell脚本,可以用来作为任务(Job)的入口

可编辑文档:文本,可作为配置文件、字典文件等

资源文件:不可编辑,包含jar包,二进制文件等

文档操作

新增

文件夹

文件(可执行文档、可编辑文档)

资源文件

image.png

上传资源文件

image.png

编辑

点击(可编辑文档或可执行文档),会打开一个Tab,进行编辑,完成之后记得保存

Tab标题中括号中数字是当前文档的编号,全局唯一

image.png


同步


image.png


任务管理

image.png

基本概念:

任务分类:

定时执行任务:由时间触发,周期地执行任务

依赖执行任务:由任务成功事件触发,依赖于其它任务,等待其它任务成功后立即执行

执行周期:

一个周期执行一次,以周期的n倍为单位执行

DAY:每天或几天执行一次

HOUR:每小时或几小时执行一次

MINUTE:每分钟或几分钟执行一次

Cron表达式(定时任务):

QuartZ Cron表达式,不同于crontab,最小单位是秒

写法参考Quartz Cron表达式

依赖的任务ID列表(依赖任务)

该任务的前置任务,该任务需依赖于这些任务,可以有多个,以英文逗号分隔

依赖描述(依赖任务)

该任务为何要依赖于这些任务

运行Worker

任务最终在哪台机器上运行,只显示用户有权限的Worker

任务所属组

任务在运行Worker上以什么身份执行,只显示有权限的用户

文档ID

任务的入口程序,通常是一个shell脚本,此处是该文档的ID,可以在“文档管理”-“编辑文档”的Tab标题中的括号内看到

资源ID列表

该任务使用的资源文档ID列表,以逗号分隔,此处是该文档的ID,可以在“文档管理”-“编辑文档”的Tab标题中的括号内看到

配置参数

image.png

如上图所示,执行一个shell脚本,有两个个地方可以获取参数:当前进程的环境变量(envMap)及传给脚本的参数(args)

一个完整的参数配置如下图所示

 

image.png

sys是系统提供的变量,用于获取调度系统信息,将以k、v格式进入envMap

env是用户提供的用户设置环境变量的参数,将以k、v格式进入envMap,env的优先级高于sys

args是跟在脚本后的参数,以空格分隔

脚本中获取参数:

env和sys的参数可以在脚本中通过“$”获取,如:${COMMON_TASK_ID}

args可以通过解析参数列表获取,如:

 

if [ $# -eq 1 ]; then
 TMP_PATH=$1
 dt=`date -d"-$NDT day" '+%Y%m%d'`
else
 echo "[Usage: ] $0 tmp dir "
 exit 1
fi

任务分类:

对当前任务的简单分类,用于任务多时做显示过滤

业务描述

是对当前的任务业务的详细描述,方面后期查看任务属性

上线

上线后将进入调度流程,请确保相关文档已同步至Worker

当该任务依赖的任务中有未上线的任务时,该任务不能上线

下线

当依赖该任务的任务中有未下线的任务时,该任务不能下线

立即运行

以当前的周期,立即执行任务

适用于以下情形:
1、还不到执行时间的定时任务
2、手动执行前置依赖的依赖任务

可选任务成功失败后是否通知依赖任务

image.png

调度中心

是所有任务执行的历史及当前状态

image.png

任务状态

状态

含义

颜色

NEW任务刚刚被创建,可以由Quartz或前置任务创建image.png
RUNNING任务正在执行
SUCCEEDED任务已成功执行image.png
FAILED任务失败image.png
KILLED失败已被杀死image.png

未启动或下线image.png

 

决定任务状态

在脚本中指定任务状态

通过linux的进程exit code判断

如exit -99,则该任务失败

部分exitcode列表

退出码

含义

举例

0成功exit 0或不写
< 0失败exit -1
> 0被杀死exit 100
-8888失败(重复运行)
-7777失败(异常)

更多参考/usr/include/sysexits.h

 

#define EX_OK 0 /* successful termination */
#define EX__BASE 64 /* base value for error messages */
#define EX_USAGE 64 /* command line usage error */
#define EX_DATAERR 65 /* data format error */
#define EX_NOINPUT 66 /* cannot open input */
#define EX_NOUSER 67 /* addressee unknown */
#define EX_NOHOST 68 /* host name unknown */
#define EX_UNAVAILABLE 69 /* service unavailable */
#define EX_SOFTWARE 70 /* internal software error */
#define EX_OSERR 71 /* system error (e.g., can't fork) */
#define EX_OSFILE 72 /* critical OS file missing */
#define EX_CANTCREAT 73 /* can't create (user) output file */
#define EX_IOERR 74 /* input/output error */
#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */
#define EX_PROTOCOL 76 /* remote error in protocol */
#define EX_NOPERM 77 /* permission denied */
#define EX_CONFIG 78 /* configuration error */
#define EX__MAX 78 /* maximum listed value */


修改

双击可修改,目前只可修改参数,修改其它无效

image.png

立即运行

以当前任务属性,立即执行任务

可选任务成功失败后是否通知依赖任务

image.png

杀死任务:

杀死当前的任务

只有当前状态是NEW或RUNNING的任务才可以杀死

image.png

 

查看日志:

可以查看当前任务的执行日志

image.png

公共

系统变量

  • USER_HOME
    指定当前用户的家目录。如下图,${USER_HOME}指代到10.10.16.100:test这一级,引用下面的文件可以使用绝对路径。
    如:引用common.cfg可以使用${USER_HOME}/in/cfg/common.cfg

    • image.png

  • COMMON_TASK_STARTTIME
    值为当前日期的前一天,格式为:yyyyMMdd

  • COMMON_TASK_ENDTIME
    值为当前日期的前一天,格式为:yyyyMMdd

  • COMMON_TASK_ID
    系统生成的唯一ID

邮件告警

配置接收邮箱

image.png

格式如下:

{
"env": {
"COMMON_TASK_MAILLIST": "xycai@cxy7.cn;caixiaoyu@cxy7.com.cn"
}
}

支持多个邮箱,以逗号或分号分隔

告警时机

任务失败,即状态变更为KILLED或FAILED时

任务依赖DAG

入口

调度中心

显示指定任务与指定的周期的依赖链条及当前状态

image.png

任务管理

显示指定任务与最新的周期的依赖链条及当前状态

image.png

DAG示例

image.png

读后有收获可以支付宝请作者喝咖啡