DataWorks(数据工场,原大数据开发套件)是阿里云数加重要的PaaS平台产品,它提供全面托管的工作流服务,一站式开发管理的界面,帮助企业专注于数据价值的挖掘和探索。
DataWorks(数据工场)基于MaxCompute作为核心的计算、存储引擎,提供了海量数据的离线加工分析、数据挖掘的能力.
使用DataWorks(数据工场),可对数据进行数据传输、数据转换等相关操作,从不同的数据存储引入数据,对数据进行转化处理,最后将数据提取到其他数据系统。
提供强大的调度能力,支持按照时间、依赖关系的任务触发机制,支持每日千万级别的任务按照DAG关系准确、准时运行。支持分钟、小时、天、周和月多种调度周期配置。(分钟的最小单位是5分钟)
完全托管的服务,无需关心调度服务器资源问题。租户之间提供隔离,保证不同租户之间的任务不会相互影响。
支持数据同步、SHELL、MaxCompute SQL、MaxCompute MR等多种任务类型,通过任务之间的相互依赖完成复杂的数据分析处理。
目前无法支持SQL运行在阿里云云数据库、阿里云分析型数据库等产品,仅支持MaxCompute。
任务(Task)
任务是指定义对数据执行的操作。使用数据同步节点任务将数据从RDS复制到MaxCompute。使用MaxCompute SQL节点任务运行MaxCompute SQL来进行数据的转换。使用工作流任务,通过内部几个不同的SQL内部节点完成一系列的数据转换。每个任务使用0或0个以上的数据表(数据集)作为输入,生成一个或多个数据表(数据集)作为输出。
任务主要分为三种:节点任务(node task),工作流任务(flow task)和内部节点(inner node)。
节点任务(node task):一个数据执行的操作。可以与其他节点任务、工作流任务配置依赖关系,组成DAG图。
工作流任务(flow task):解决一个小业务的一组内部节点组成一个工作流任务。工作流任务数量建议小于10个。工作流任务内部节点,无法被其他工作流任务、节点任务依赖,工作流任务可以与其他工作流任务、节点任务配置依赖关系,组成DAG图。
内部节点(inner node):工作流任务内部的节点,与节点任务能力基本相同。其调度周期会继承工作流任务的调度周期,无法进行单独配置,依赖关系也按照拖拽关系。
实例(Instance)
在调度系统中的任务经过调度系统、手动触发运行后会生成一个实例,实例代表了某个任务在某时某刻执行的一个快照,实例中会有任务的运行时间、运行状态、运行日志等信息。
提交(Submit)
提交是指开发的节点任务、工作流任务从开发DataWorks环境发布到调度系统的过程。完成提交以后,相应的代码、调度配置全部合并到调度系统中,调度系统按照相关配置进行调度操作。
未提交的节点任务、工作流任务不会进入到调度系统。
脚本开发(Script)
脚本开发是提供给数据分析使用的一个代码存储空间,脚本开发的代码无法发布到调度系统,无法进行调度参数配置,仅可以进行一些数据查询分析的工作。
在DataWorks(数据工场,原大数据开发套件)中,可以通过界面管理资源、函数。如果通过MaxCompute的其他方式进行资源、函数管理,则无法在DataWorks中进行相关的查询。
数据开发流程:
数据开发的总体流程包括数据产生、数据收集与存储、数据分析与处理、数据提取和数据展现与分享,如下图所示:
数据产生
业务系统每天会产生大量结构化的数据,这些数据都存储在业务系统所对应的数据库中,包括MySQL、Oracle、RDS等类型。
数据收集与存储
若想利用MaxCompute的海量数据存储与处理能力来分析这些已有的数据,首先需要将不同业务系统的数据同步至MaxCompute中。
DataWorks提供数据集成服务,可支持多种数据源类型将业务系统数据按照预设的调度周期同步到MaxCompute。
数据分析与处理
随之可对MaxCompute上的数据进行加工(MaxCompute SQL、MaxCompute MR)、分析与挖掘(数据分析、数据挖掘)等处理,从而发现其价值。
数据提取
分析与处理后的结果数据,需同步导出至业务系统,以供业务人员使用其分析的价值。
数据展现和分享
最后可通过报表、地理信息系统等多种展现方式来展示与分享大数据分析、处理后的成果。
调度参数:
目前系统参数有两个,这两个系统参数只要代码里用到,不需要做额外的赋值动作,节点自动调度的时候就会自动替换。系统参数分别为:
${bdp.system.bizdate}格式 yyyymmdd,日常调度实例定时时间的前一天(年月日)。节点每天自动调度实例定时时间年月日减 1 天。
${bdp.system.cyctime}格式 yyyymmddhh24miss,日常调度实例定时时间(年月日时分秒)。 yyyy 表示 4 位数年份,mm 表示 2 位数月份,dd 表示 2 位数天,hh24 表示 24 小时制的时,mi 表示 2 位数分钟,ss 表示 2 位数秒。
使用方式:节点代码里编辑如 pt=${bdp.system.bizdate},然后节点在调度上运行即可自动替换值。
若节点每天调度时代码里有变量需要赋当天减 2 的日期,即业务日期减 1 天,格式为 yyyymmdd,需要系统参数和 MaxCompute 内建函数一起使用,如下:
节点代码
dt=to_char(dateadd(TO_DATE('${bdp.system.bizdate}', 'yyyymmdd'), -1, 'dd'), 'yyyymmdd')
目前支持.csv/.txt 文件上传,一次性上传文件大小上限为 10M。
一个工作流里没有业务关系的节点可以不用彼此依赖。
工作流节点的依赖:
一个工作流里只能有一个根节点,即没有父节点的节点。
一个工作流里某个节点可以依赖多个节点,也可以被多个节点依赖。
一个工作流里可以有多个节点没有被其他节点依赖。
角色权限的说明:
项目管理员:指项目空间的管理者,可对该项目空间的基本属性、数据源、当前项目空间计算引擎配置和项目成员等进行管理,并为项目成员赋予项目管理员、开发、运维、部署、访客角色。
开发:开发角色的用户能够创建工作流、脚本文件、资源和 UDF,新建/删除表,同时可以创建发布包,但不能执行发布操作。
运维:运维角色的用户由项目管理员分配运维权限;拥有发布及线上运维的操作权限,没有数据开发的操作权限。
部署:部署角色与运维角色相似,但是它没有线上运维的操作权限。
访客:访客角色的用户只具备查看权限,没有权限进行编辑工作流和代码等操作。
安全管理员:安全管理员仅在数据保护伞中用到,用于敏感规则配置,数据风险审计等。
周期配置
一个周期运行的任务,它的依赖关系的优先级大于时间属性。在时间属性决定的某个时间点到达时,任务实例不会马上运行,而是先检查上游是否全部运行成功。
上游依赖的实例没有全部运行成功并且定时运行时间已到,则实例仍为 未运行状态。
**上游依赖的实例全部运行成功并且定时运行时间还未到,则实例进入 等待时间 状态。
**
上游依赖的实例全部运行成功并且定时运行时间已到,则实例进入等待资源状态准备运行。
当一个任务被成功提交后,底层的调度系统从第二天开始,将会每天按照该任务的时间属性生成实例,并根据上游依赖的实例运行结果和时间点运行。23:30 之后提交成功的任务从第三天开始才会生成实例。
若有一个任务需要每周一执行一次,那么只有运行时间是周一的情况下,该任务才会真正执行,运行时间非周一的情况下,该任务会空跑(直接将任务置为成功),不会实际运行。所以周调度任务,在测试/补数据的时候,需要选择业务日期=运行时间-1。
天调度任务,即每天自动运行一次。新建周期任务时,默认的时间周期为 每天 0 点 运行一次,可根据需要自行指定运行时间点,例如指定每天 13 点运行一次。
周调度任务,即每周的特定几天里每天在特定时间点自动运行一次。当到了没有被指定的日期时,为保证下游实例正常运行,系统也会生成实例但直接设置为运行成功,而不会真正执行任何逻辑,也不会占用资源。
月调度任务,即每月指定的特定几天里每天在特定时间点自动运行一次。当到了没有被指定的日期时,为保证下游实例正常运行,系统也会每天生成实例但直接设置为运行成功,而不会真正执行任何逻辑,也不会占用资源。
小时调度任务,即每天指定的时间段内按 N*1 小时的时间间隔运行一次,比如每天 1 点到 4 点的时间段内,每 1 小时运行一次。
分钟调度任务,即每天指定的时间段内按 N* 指定分钟的时间间隔运行一次,目前能支持的最短时间间隔为每 5 分钟运行一次。
当一个任务被配置为暂停时,调度系统仍会每天按时间属性为该任务生成对应的一个或多个实例,但这些实例在定时时间到达时不会真正运行其中的代码,而是直接被设置为运行失败,以保证下游实例不会被触发运行。被直接设置为运行失败的实例,实际并没有执行其中的代码,因此没有日志信息产生。
依赖关系
在调度配置中,会需要配置两个任务级别的依赖:依赖属性和跨周期依赖。
自动推荐:系统自动扫描节点代码解析出来源表和目标表,从而推荐来源表是从哪个任务产出,只有 SQL 类型节点任务和工作流任务有这个功能,同时也只能解析到 SQL 任务产出的表 。
所属项目:当前组织内所有项目空间,可在下拉列表中进行选择。
上游任务:对应所属项目空间中的任务,用来设置当前任务的上游任务,非必填项。支持工作流名称模糊匹配查询 。
一个工作流可以依赖多个上游工作流,同样,一个工作流可被多个工作流依赖。依赖属性为非必填项,当下游工作流需依赖上游工作流产出数据,则可配置依赖关系。
配置节点/工作流任务的跨周期依赖,如:天调度任务中,今天需要执行的数据依赖本任务昨天执行的数据,那么可以配置依赖昨天任务的周期,这样一来,昨天的实例必须先执行成功,今天的实例才可以调度起来,这种依赖主要是体现在任务调度实例的依赖 。
跨周期依赖说明:
不依赖上一调度周期:所有任务默认选择该选项,即不依赖任何任务的上周期实例。
自依赖:等待本任务上一调度周期结束,才能继续运行:应用场景:任务 A 当前周期数据来源依赖于任务 A 上周期执行的结果;或者小时/分钟调度任务 A 不允许实例并行。
等待下游任务的上一周期结束,才能继续运行:依赖第一层子任务的上周期。这种应用场景不多,选择此项,后续该任务一旦被其他任务直接依赖则实例都依赖所有第一层子任务的上周期实例。
等待自定义任务的上一周期结束,才能继续运行:应用场景:天任务 A 依赖一个数据是天任务 B 昨天产出的。