任务管理
任务与实例
任务与实例是一对多的关系,可以在“任务管理”页查看任务(Job),一个任务每运行一次,被称作一个实例(Instance),可以在“标签实例”或“群组实例”中查看任务的实例。任务是固定的一个配置,将一个任务运行多次,每次的结果、数据产出都不一样。
任务类型
{tag_en}包含4种任务,标签任务、群组任务、关系任务和数据同步任务。
标签任务
任务 | 任务名称 | 加工规则 | 任务描述 |
---|---|---|---|
大宽表任务 | ${实体中文名称}_标签大宽表更新 | 加工标签大宽表 - 表名称:${数据库标识}_${实体标识}_tags - 分区字段:tag_engine_partition | 在实体创建成功后生成,任务运行成功后大宽表数据重新计算,同时原子标签也更新 |
虚节点任务 | ${实体中文名称}_标签虚节点 | 空任务,不加工任何表,用来区分标签任务和上游任务,当虚节点运行成功后,开始运行下游的标签任务 | 与标签大宽表的更新规则一致,手动建完第一个标签后生成此任务 |
衍生标签任务(规则加工) | 每个衍生标签的中文名称 | 加工标签临时表 - 表名称:temp${实体id}${标签id}_rule - 分区字段:tag_engine_partition | 标签更新任务,一个标签一个任务,运行后标签数据将重新计算 |
衍生标签任务(SQL加工) | 用户设置的任务名称 | 加工标签临时表 - 表名称:temp${实体id}${sql_id}_finaltagsql - 分区字段:tag_engine_partition | 标签更新任务,一段SQL一个任务,运行后相同SQL片段内的多个标签一同更新 |
组合标签任务 | 每个组合标签的中文名称 | 加工标签临时表 - 表名称:temp${实体id}${标签id}_rule - 分区字段:tag_engine_partition | 标签更新任务,一个标签一个任务,运行后标签数据将重新计算 |
自定义标签任务 | 每个自定义标签的中文名称 | 空任务,不加工任何表,用于任务链拼接,当标签导成功后,跑空任务,然后跑下游的标签或大宽表任务 | 一个标签一个任务,与标签大宽表的更新规则一致,标签值导入成功后生成 |
自定义标签在每次导数据的时候加工标签临时表,其本身不参与周期调度,而任务实例中产生的自定义标签任务是一个空节点,用于调起下游的大宽表任务。
群组任务
动态群组会定时更新群组数据,并将数据定时存储至数据表中,动态群组发布后将产生对应的群组更新任务;静态群组只保存当时的数据到表中,静态群组任务是临时任务,没有调度周期;实时群组无群组任务。
任务 | 任务名称 | 加工规则 | 任务描述 |
---|---|---|---|
动态群组任务 | ${群组中文名称}_群组更新 | 加工动态群组表 - 表名称:${数据库标识}_${群组标识}_grouptagsupdate_dynamic - 分区字段:tag_engine_partition | 动态群组发布后生成该任务,运行成功后群组数据更新 |
静态群组任务 | ${群组中文名称}_群组更新 | 加工静态群组表 - 表名称:${数据库标识}_${群组标识}_grouptagsupdate_static_state - 分区字段:tag_engine_partition | 临时任务,静态群组保存后生成该任务 |
模型任务
周期更新或手动更新的模型均会生成实例。其中,周期更新的模型任务会定时更新模型数据,并将数据定时存储至数据表中,模型创建后将产生对应的模型更新任务。手动更新的模型其任务实例手动出发,无调度周期。
任务 | 任务名称 | 加工规则 | 任务描述 |
---|---|---|---|
模型任务 | \${实体名称}${模型名称}模型任务 | 【模型表名称】 RFM:\${数据库标识}_${实体标识}_${模型id}_rfm_model_tags APMDR:\${数据库标识}_${实体标识}_${模型id}_apmdr_model_tags AIPL:\${数据库标识}_${实体标识}_${模型id}_aipl_model_tags AARRR:\${数据库标识}_${实体标识}_${模型id}_aarrr_model_tags 【模型表表结构】 RFM:实体主键、模型参数值R、模型参数值F、模型参数值M、模型值 生命周期模型:实体主键、模型值 | 模型创建会即会生成对应的模型任务,实例生成时间根据配置的更新规则决定 |
关系任务
任务 | 任务名称 | 加工规则 | 任务描述 |
---|---|---|---|
关系任务 | 用户设置的任务名称 | 加工关系物理表 - 表名称:用户自定义的表名称 - 分区字段:tag_engine_partition | 关系模型存储为物理表后会生成关系加工任务,运行成功后关系模型表的数据更新 |
数据同步
由于Hive的限制,API无法直接查询存储在Hive中的表。数据同步任务把存储在Hive中的大宽表、群组表(动态群组表、静态群组表)同步到Hbase中,供API的查询。
任务 | 任务名称 | 加工规则 | 任务描述 |
---|---|---|---|
大宽表同步任务 | ${实体中文名称}_数据同步 | 把hive中最新分区的大宽表同步至hbase - 表名称:${数据库标识}_${实体标识}_tags_yyyyMMdd - hbase中的表不是分区表,通过表名称的日期后缀区分 | 实体创建成功后生成该任务,运行成功后Hbase中的大宽表数据更新 |
动态群组同步任务 | ${群组中文名称}_数据同步 | 把hive中最新分区的动态群组表同步至hbase - 表名称:${数据库标识}_${群组标识}_grouptagsupdate_dynamic_yyyyMMdd - hbase中的表不是分区表,通过表名称的日期后缀区分 | 动态群组第一次发布成功后生成该任务,运行成功后Hbase中的群组表数据更新 |
静态群组同步任务 | ${群组中文名称}_数据同步 | 把hive中的静态群组表同步至hbase - 表名称:${数据库标识}_${群组标识}_grouptagsupdate_static_state - 非分区表,无分区字段 | 临时任务,位于静态群组更新任务的下游,任务运行成功后,hbase中生成一张静态群组表 |
目前的数据同步工具FlinkX不支持数组类字段,所以Hive表中的数组类标签不会被同步至HBase中,数组类标签不支持API功能。
数据同步任务可进行任务参数和HBase参数的修改,支持添加自定义参数,从而提高同步效率。
- 任务运行方式:支持oer_job和session选择。
- per_job:单独为任务创建flink yarn session,适用于低频率,大数据量同步。
- JobManager内存:per_job模式下jobManager配置的内存大小,默认1024(单位MB)
- TaskManager内存:per_job模式下taskManager配置的内存大小,默认2048(单位MB)
- Slots:per_job模式下每个taskManager 对应 slot的数量,默认为1
- 作业并发数:根据业务需求和集群资源设定,并发数支持设置1-100,默认为1
- 允许脏数据条数:当产生的脏数据条数超过设置的阈值时,作业停止同步、置为失败。设置为0或空时,表示不允许有脏数据出现。脏数据指系统定义的因主键冲突、格式转换错误等原因造成的无法正常写入的数据
- session:多个任务共用一个flink yarn session,适用于高频率、小数据量同步。
- per_job:单独为任务创建flink yarn session,适用于低频率,大数据量同步。
- WriteBufferSize:HBase client 数据的缓存池大小,调高该值可以减少rpc请求次数,提高hbase写入性能。一般来说数据量100w以下的表设置为8M,数据量在100w到1000w的表设为32M,数据量在1000w以上的表设置为64M,如果觉得速度还是太低,可以尝试将该值调整至128 M,但不建议超过128M。
- 支持自定义设置任务参数和HBase参数,自定义参数文本框只能输入字母、数字、下划线、“-”、小数点,最大可输入200字符
任务调度
更新周期
任务类型 | 更新周期 | 更新时间 |
---|---|---|
标签任务 | 天、周、月、小时、分钟 | 具体更新时间用户自行选择 |
群组任务 | 天、周、月、小时、分钟 | 具体更新时间用户自行选择 |
关系任务 | 天、周、月、小时、分钟 | 具体更新时间用户自行选择 |
数据同步 | 天、周、月、小时、分钟 | 依赖于上游加工hive表任务的更新周期 |
更新周期的配置包括如下内容:此任务接受调度还是停止调度?此任务在什么时间生效?多长时间间隔运行一次?具体什么时候运行?具体包括:
- 调度状态 选中"冻结",表示此任务停止运行,不会进行实际的计算(通常此功能用于暂时不需要运行,但也不想删除的任务); 冻结后任务每天仍会产生实例,但调度时会直接返回已冻结状态,不会真正运行任务逻辑。
- 生效日期:任务只在生效日期内执行;
- 调度周期:分为{天;周;月;小时;分钟},若选中"天",则表示此任务每天执行一次;
- 起调时间:用户设定调度周期后,还需要设定具体在哪个时刻点启动任务。根据用户选择的调度周期不同,起调时间需要配置不同的参数:
调度周期 | 起调时间配置 |
---|---|
日 | 天调度任务,即每天自动运行一次。新建周期任务时,默认的时间周期为每天0点运行一次,可根据需要自行指定运行时间点,配置"具体时间": - 小时:单选下拉列表,00-23,默认选中00 - 分钟:单选下拉列表,00-59,默认选中00 |
周 | 周调度任务,即每周的特定某天在特定时间点自动运行一次,需配置"选择时间"和"具体时间": - 选择时间:复选下拉列表{星期一;星期二;……星期日},单选,默认选中"星期一"; - 具体时间:同"调度周期-日"相同; |
月 | 月调度任务,即每月指定的特定某天在特定时间点自动运行一次,需配置"选择时间"和"具体时间": - 选择时间:复选下拉列表{每月最后一天;每月1号;每月2号;……每月31号},单选,默认选中"每月1号"; - 具体时间:同"调度周期-日"相同; |
小时 | 小时调度任务,即每天指定的时间段内按N*1小时的时间间隔运行一次,比如每天1点到4点的时间段内,每1小时运行一次。当调度周期切换到非天级调度时,节点起调时间将不可选,需配置 “开始时间” 、 “结束时间” 和 “间隔时间” : - 开始时间、结束时间:同 “调度周期-日” 类似,小时可选择00-23,分钟可选择00-59; - 间隔时间:单选下拉列表{1小时;2小时……23小时},默认选中1小时; - 开始时间,应早于结束时间 ; |
分钟 | 分钟调度任务,即每天指定的时间段内按N*指定分钟的时间间隔运行一次,目前能支持的最短时间间隔为每5分钟运行一次,当调度周期切换到非天级调度,节点起调时间将不可选,需配置 "开始时间" 、 "结束时间" 和 "间隔时间" : - 开始时间、结束时间:同 "调度周期-小时" 相同; - 间隔时间:单选下拉列表{5分钟;10分钟;……55分钟},默认选中5分钟; - 开始时间,应早于结束时间 |
实例的生成
{tag_en}在每天22:00统一生成第二天所有需要的任务实例,基于以上设计,任务开发时需要注意任务的提交时间,这里以一个天周期调度任务A为例: 任务A基本信息:调度周期:1天;具体调度时间:8:00;
- 若您在1月1日21:00提交A任务(时间轴上侧),将会在当天22:00产生A任务的实例,并会在1月2日8:00第一次运行;
- 若您在1月1日23:00提交A任务(时间轴下侧),由于已经在22:00产生了1月2日的所有实例,A任务在1月2日将不会运行。A任务的实例将会在1月2日22:00产生,并在1月3日第一次运行。
1. 任务被配置为冻结是否生成实例? 处于冻结状态的任务,其周期实例依然会生成,但不会运行。 对于存在依赖关系的多个任务,如果将上游任务A冻结,则下游任务B也会进入"冻结"状态,B任务的实例也会产生,但不会运行,在B任务的执行日志中会打印出是由于A任务被冻结才没有运行的。
2. 任务被删除是否会影响实例的运行? 任务删除后,已生成的任务实例不会被删除,但会运行失败。
任务运行条件
每天按计划运行周期实例时,调度系统判断一个实例是否可以运行,需满足2方面条件:
- 任务的计划时间
- 上游任务是否全部成功
若不能同时满足以上2个条件,则任务会处于等待提交状态。满足以上2个条件时,此任务在调度系统中具备了运行的条件,调度系统会将任务「提交」至计算引擎(任务进度等待运行状态),此任务还需要获得集群的计算资源,集群资源的分配由计算集群分配,用户不可干预,因此,满足时间+上下游依赖条件,并不意味着任务会立即开始运行,其可能在等待计算资源。
例如,某任务A计划时间为每天02:00,上游依赖B、C、D 3个任务,那么判断A任务是否可运行,其判断逻辑为:
- 当前时间>=02:00
- 上游任务B、C、D是否全部为成功状态
任务依赖
{tag_en}的任务依赖不需要用户配置,系统自动按照“主表/辅表/关系加工任务-虚节点任务-衍生标签任务-组合标签任务-大宽表任务-动态/静态群组任务-数据同步任务”形成依赖关系,如下图所示:
其中静态群组任务和静态群组数据同步任务是临时任务,没有调度周期,在群组发布或编辑后立马运行。
任务运行时,遵循更新时间和任务依赖关系,且依赖关系大于时间属性。在时间属性决定的某个时间点到达时,任务实例不会马上运行,而是先检查上游是否全部运行成功。
- 上游依赖的实例没有运行成功并且定时运行时间已到,则实例不会运行
- 上游依赖的实例运行成功并且定时运行时间还未到,则实例不会运行
- 上游依赖的实例运行成功并且定时运行时间已到,则实例具备了运行的条件,待其获得集群的计算资源后即可以开始运行,用户不可干预
{tag_en}任务直接存在依赖关系,当上游任务运行失败时,会影响有依赖关系的下游任务,下游实例的任务状态为「上游失败」。
如果某个衍生标签任务失败,则会影响到下游有依赖关系的组合标签任务、大宽表任务、动态群组任务,所以数据开发应关注标签的更新任务是否成功。
任务列表
点击“标签中心-任务中心-任务管理”菜单,进入任务列表,可查看任务信息:
- 任务类型:包含标签任务、群组任务、关系任务、数据同步这4种同步任务
- 更新周期:任务的调度周期,包括天、周、月、小时、分钟更新
- 提交时间:任务的提交时间
- 任务责任人:系统创建的任务,包括大宽表任务、虚节点任务、数据同步,任务责任人为租户所有者;关系任务、标签任务、动态群组任务的责任人为对应的创建人
基本功能
- 任务搜索:可以按照任务名称、任务责任人搜索实体下的任务
- 任务筛选:可以根据任务类型、更新周期筛选任务
冻结与解冻
可对任务批量执行「冻结/解冻」操作,已冻结的任务,将会在任务名称后标注「已冻结」
- 冻结:表示此任务停止运行,不会进行实际的计算(通常此功能用于暂时不需要运行,但也不想删除的任务)
- 冻结后任务每天仍会产生实例,但调度时会直接返回已冻结状态,不会真正运行任务逻辑
- 冻结任务的下游依赖任务不满足运行条件,但仍然会产生周期实例,直接返回等待提交状态
- 解冻:对已冻结的任务进行解冻操作,继续按调度时间运行周期实例