偶数科技-数据中台Lava-作业调度使用指南

本文主要介绍如何在Lava中实现作业调度,数据中台Lava的安装教程:https://blog.csdn.net/oushukeji/article/details/108641435

作业调度是一个数据中台必不可少的组成部分。实际生产中许多业务都有调度需求,即自动的在预定时间分步骤先后执行工作,从而保证各步骤间依赖被正确且高效地处理。可以说调度极大的解放了运维人员。

作业调度的两个主要功能:A.把任务根据依赖关系依次执行。B.定时执行。
主要包含三个概念:Job Group(作业组),Job(作业)与Task(任务)。一个Group可以有多个Job,一个Job包含多个Task。

Task(任务)是最小的执行单位,每个任务都是独立可执行的,目前支持的任务类型有脚本任务,数据同步任务,AI相关任务。Job(作业)是最基本的组织单位及执行单位,Job包含了若干Task以及它们之间的 依赖,一个 Job的每次执行都会形成一个Job的实例,当然Task也一样。Group(作业组)是组织Job的 单位,同一个Group下的Job共享Group级别的并发限制以及优先级。

1.作业调度设计

  • 概念及约束

    1.Job Group(作业组),Job (作业)与Task(任务)是作业调度的所有组织运行所依托的基 本概念。使用时需要遵循一些基本约束:一个Job只能属于一个作业组,同一个Job内不能有同名Task,同一个Job的Task根据依赖必须组成一个或者多个有向无环图(DAG)。
    image.png
    2.Job,Task实例是每次执行产生的具体对象。Job的每一次执行,都会生成一个Job 实例, 一个 Job实例包含若干Task实例。

  • 基本架构
    作业调度服务端基于spring boot框架实现,元数据存储于PostgresSQL数据库,其配套UI在Lava中作业调度目录下。

2.作业调度集群

作业调度现阶段仅支持单节点模式的可视化配置部署。

  • 点击左侧菜单栏“作业调度”->“集群”,打开作业调度集群管理页面,此时列表为空,点击列表右上角“+创建新集群”打开集群创建向导,根据提示创建集群,Lava平台只能部署一个作业调度集群。
    image.png
  • 输入作业调度所使用的postgresql的信息。PostgreSQL使用来存储作业调度的数据的。
    image.png
  • 输入作业调度所使用的工作路径相关信息。工作路径(本地文件系统及HDFS)是为了保存用户所有上传文件至系统自动分配路径下,来进行版本控制。
  • 输入集群名称,选择节点(只能选择一个节点),点击“部署”,静候部署结果。
    image.png

3.作业调度使用

  • 作业组

作业组是一个或者多个作业的集合。系统默认有一个default作业组,如果在创建作业的时候没有指定作业组,那么该作业会自动添加到default作业组。每个作业组都可以指定组级优先级、组内作业并发数上限、组内任务并发数上限。每个作业只能属于一个作业组。如果把作业job1添加到group1中,然后再编辑group2把job1添加到group2中,那么 job1在被添加到group2的时候会自动移出group1。如果作业组中有作业,那么不能被删除。可以点击“配置”来修改已经添加的作业组。
image.png

点击作业组列表右上房“+添加作业组”,弹出“添加作业组”页面,输入作业组名称、作业组的优先级(数值越小优先级越高,0为最高)、并发作业限制、并发任务限制、选择组内作业(可选)点击保存即可。作业组的优先级适用于所有的组内作业。
 

  • 作业及任务

点击左侧菜单栏“作业调度”->“作业”,打开作业管理页面。在该页面可以查看作业的列表、创建时间、状态等信息。可以对作业做添加、删除、申请上线、审核、执行、停止、定时、下线等操作。可以根据过滤条件根据状态过滤作业。点击右上角“+添加作业”可以打开添加作业页面。刚添加的作业是离线状态,需要申请上线,等管理员审批之后,才能够变成“上线”状态,才能运行
image.png
点击右上角“+添加作业”可以打开添加作业页面。有两种添加作业的方式:上传Json文件、在线创建。上传Json文件:点击“+选择Json文件”在本地文件系统选择您定义好的Json文件,点击“上传”即可创建一个Job。
Json文件的定义如下:
image.png
如果选择在线创建,系统会创建一个空的Job,右键点击作业流图的节点,选择“新建上游/下游任务”,选择任务类型。当前支持的类型有:脚本任务、AI训练任务、数据同步任务。
根据选择的任务类型,输入响应的参数点击“创建”即可。数据同步任务如下图所示,AI训练任务等类似。
image.png
在作业流图上,右键某个任务,选择“依赖管理”,可以管理某个任务的上下游任务。
在作业流图上,右键某个任务,选择“任务配置”,打开任务配置页面,可以配置业务的相关信息,包括任务详情、任务参数等。
新建的作业默认是“未发布”(离线)状态,需要申请上线并通过审批后才能够执行。只有sysadmin或oushuadmin用户才能够审批申请上线的作业。
image.png
 

  • 跨作业依赖
    在作业流图上,右键某个任务,选择“跨作业依赖管理”,可以管理某个任务的跨作业上下游任务。配置完成跨作业依赖后,可以在任意互相依赖的作业中点击”运行所有依赖作业”,即可激活多作业,以配置的依赖运行。停止任意任务,会停止所有本次运行的互相依赖的任务。
    image.png
     

  • 文件存储方式(本地文件系统/HDFS)
    创建文件相关任务(脚本任务、SQL任务等)时,用户可以选择上传本地文件到作业调度系统以完成调度工作。我们支持作业调度节点本地文件系统以及作业调度依赖的HDFS两种文件存储方式。用户选择下拉菜单中的不同选项以确定本次文件是否上传至HDFS,具体保存路径会在用户配置的工作路径下的系统自动分配地址。
    image.png
     

  • 沉浸开发模式
    在作业界面,点击右上角菜单中的”沉浸开发”即可进入沉浸开发模式。这里是纵向三栏结构,从左起依次是文件目录、文件编辑区、绑定作业流图三部分内容。用户在文件目录操作栏中可以任意展开操作(增删改)多级目录及文件,这里父级目录是默认的工作路径下系统分配的地址。双击任何文本文件,中间栏目会在编辑器中展示文本,用户可以修改保存。
    image.png
    在文件目录下右键任意叶子节点,可以唤出菜单查看文件历史,系统支持最近10个版本的历史记录,用户可以查询比较及回退。
    image.png
     

  • 执行
    在作业的作业列表中,对于已经上线的作业,点击“执行”按键可以执行作业。在某具体已上线作业的作业流图中,点击右上角“执行作业”可以执行作业。已经定时的作业,根据定时的周期,会定时触发作业的执行。
    image.png
    image.png
    触发执行之后,跳转到执行详情页面,在该页面可以实时跟踪作业执行的状态,点击右上角的“终止作业” 可以终止该作业执行。
    点击“任务列表”标签,可以已任务列表的形式查看作业执行的状态。
    image.png
     

  • 执行策略
    策略是指执行中的各级别并发限制,以及各级别不同优先级。其可能影响执行过程及结果。不同策略的配置 需要参考实际硬件环境以及业务场景,从而使执行Job执行更高效准确。每一级Task并发限制具有同等效力,即Task真正执行要突破每一级并发限制。Task优先级先以Job Group为先,0为最优先。

    1.全局策略
    在左侧作业调度菜单下,点击配置子菜单,进入全局配置页面。此处可配置全局级别Job(作业)及Task(任务)并发数。
    2.Job级别策略
    在Job(作业)列表下点击任意作业进入作业详情,点击右上角作业配置弹出作业级别配置。这里配置作业级别策略。
    3.Job Group级别策略
    在作业组相关页面配置,见上文作业组详情。
    4.即时策略
    在执行详情(Job某个实例详情)页面,对于正在执行的Job实例,点击右上角即时策略按钮,即弹出即时可配置策略。包含部分上述策略配置。
     

  • 探索模式
    探索模式是为了帮助用户更好的关注运行实例局部,支持用户点击来展开收缩节点的功能。在执行详情页面下的动态任务流图中,图例分为圆形和稍大些的方形节点,圆形节点代表没有下游的Task(任务)或者其 所有的下游Task(任务)皆已展开的节点,反之,方形节点代表所有可以被进一步展开或展开不完全的节点。方形节点状态会显示为其未在页面上的子孙节点中非“执行完”状态的节点状态。对于包含不超过500个节点的Job,系统默认全部展开,用户依然可以收缩,再展开任意节点。对于大于500个节点的Job,系 统初始默认显示所有根节点,用户可以自行探索。
    同时,用户也可以根据个人使用习惯调整流图的垂直方向,点击流图左下角旋转图标即可切换垂直方向。
     

  • 续跑
    执行失败的作业实例,可以在作业实例列表页面点击“续跑”来重新从失败的或者停止的任务开始继续执行这个作业实例。
    image.png
     

  • 定时执行
    开启定时:点击作业列表中的“定时”按键,弹出定时页面,如下图。选择开始时间、结束时间、定时的周期,打开“定时开关”,点击“保存”即可完成作业的定时。作业调度的定时是基于cron表达式的,点击 “Advanced”标签可以直接编辑 cron表达式来定义定时的周期。关闭定时:同样的方式打开定时页面,关闭 “定时开关”即可。
    image.png
     

  • 异常处理及重试
    对于脚本的任务,exit(0)代表成功,exit(1)代表失败。除此之外,还有另外的一种判定成功失败的方法:无论一个脚本的任务的输出是标准输出(stdout)还是错误输出(stderror),都可以根据关键字的形式定义一个任务的执行是否是成功的还是失败的,是否需要retry以及retry次数。例如一个脚本任务执行完之后,stderror输出了一些错误日志,比如“⋯.connection timeout⋯⋯”,虽然脚本exit(0),我们决定对出现这种错误的任务执行标志为失败,那么可以这么定义错误处理的参数:打开作业配置,在错误处理参数部分点击“+添加处理”,参数名字输入“connection timeout”,参数值输入您想要retry的次数,在输出中只要有“connection timeout”的字眼,会retry,retry次数用完后如果还没成功则会标记为失败;如果retry次数为0,则不会retry,直接标记为失败。
    同时,在该配置页面”错误处理”栏目下可以配置重试时间间隔。添加参数名为”RetryInterval”,参数值单位为秒。
     

  • 错误及日志
    作业实例(执行)的作业流图中,鼠标放到出错的任务上,会自动弹出作业的详细信息,包括出错日志。在作业实例的任务列表中,点击“日志”可以查看某个任务执行的日志。通过日志文件查看作业的某次执行或者整个作业调度的日志。

    作业调度总日志:/usr/local/oushu/lavaflow/logs/lavaflow.*****.log
    作业单次执行的日志:/usr/local/oushu/lavaflow/logs/job/jobname.****.log
    image.png

 

 

 

已标记关键词 清除标记