开发者学堂课程【DataWorks 一站式大数据开发治理平台精品课程:6.DataWorks数据集成日志查看】与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/81/detail/1243
6.DataWorks 数据集成日志查看
内容介绍:
一、数据集成任务完整日志分为两大部分
二、日志第一部分
三、日志第二部分
四、常见问题
五、示例
一、数据集成任务完整日志分为两大部分
以 Rds-mysql 至 odps 为例。
1、第一部分主要打印任务的总体状态,第二部分打印线程明细、执行过程和结果等。它们这两部分日志是分开的,它们有一个共同的模块信息,就是调度信息。
2、系统参数信息模块:
记录运行机器、地域信息、项目名、节点信息、参数值,就是调度的调度参数,实际替换的参数值。
3、需要关注点:
(1)配置的参数是否被真实值替换。( 配置出错或者未解析会导致实际任务运行时找不到分区/查不到数据等)。
(2)运行任务的数据集成资源组类型(部分数据源仅支持独享数据集成资源组)。
(3)资源组标识:
运行在数据集成公共资源组上: in Pipeline[basecommon_ group_ xxxxxxxx] 日志中会有明显的信息提示。
运行在数据集成自定义资源组上: in Pipeline[basecommon xxxxxxx] 这一点会很快速明确的区分出自己的任务是运行在什么样的资源组上。
运行在数据集成独享资源组上: in Pipeline[basecommon_ S_ res_ group_ xxx
二、日志第一部分
1、同步任务的四个状态分别为submit、wait、 run、 success/failed。
(1)submit :提交任务,将数据集成任务提交到服务器执行。数据集成任务不允许同一个任务同时提交两次,所以当一个任务同时提交了多个实例时仅有一个会被服务器接收,另一个会提交失败(补数据和周期实例冲突、补数据和手动运行冲突、周期实例间隔时间段冲突、周期实例和手动触发任务提交冲突这些情况都会导致任务提交失败)。所以当有多实例job冲突时,会造成 submit failed 的现象。
(2)wait :等待数据集成资源组分配资源使该任务运行。若数据集成资源组资源不足,则运行日志中会有长时间处于wait状态的现象且任务进度一直为0%。这状态持续的时间可长可短,当数据集成资源组资源不足时,状态会持续比较长的时间。通常如果使用公共数据集成资源组,现象还是比较常见的。如果使用独享数据集成资源组,任务配置的编码数合适,且各个任务之间的执行时间和运行时间合理分配的情况下,一般不会出现过长wait等待状态。
(3)run :表示数据集成任务已经在资源组上运行了。run状态时间较长,执行的任务较多,包括预执行 preSq| (删除表数据等)、同步数据、数据写入目的端后执行postSq|(同步完成后执行的sql,删除部分重复数据等)等。如果任务进度卡在某个百分点不动,可以检查下是否配置了预执行或者后执行sql语句。
(4)Success/failed:分别表示任务执行成功/失败。
以上是同步任务日志第一部分主要打印信息,为任务渲染、提交、运行、执行完毕的日志
日志结束的标志信息:
DI Finish at: xXXXXX
三、日志第二部分
1、任务执行明细、子线程执行情况及结果返回信息、数据写入信息等。
2、该部分日志请在如图所示的运维中心的运行日志中找detail log url这个标识符,可从该链接中查看详细日志,可以获取明细。
3、大体可分为6个步骤:
(1)任务渲染完毕后提交的实际配置以及参数替换结果的json配置。它会提交到数据集成资源组上,设计成插件,对该部分信息进行解析,并且开始执行各阶段任务。
(2)数据源端的表信息、列信息。
(3)对 odps 表做数据清理(如果配置了写入前清理数据)。
(4)根据配置的切分键生成sql到数据源端读取数据(若是配置了querysql那么会执行 querysql 忽略切分键配置)。查询之后的结果会被同步到目的端。没有使用split PK 还是配置了个人sql,那么会跳过所谓的PK属性,就是跳过切分,而直接执行 querysql,将 querysql 在数据库端得到的数据同步到目的端。
(5)执行取数sql并向目的端写入数据。
(6)数据条数、速率的最终统计。任务一共读到了多少条数据,多少个字节,速率是多少,每秒的数据条数是多少,这是主要的6个模块。
四、常见问题
1、Odps表不存在(在生产环境运行任务报该异常一般是只创建了odps开发表后直接配置了数据集成任务然后就发布运行了,需要再创建生产表)。dataworks项目分为开发环境和生产环境,如果是标准模式,那么在生产环境同步数据需要有生产表,如果在开发环境同步数据需要有开发表,环境问题也是经常被问到的问题。
2、任务提交后一直是wait状态 (当数据集成资源组不足时会出现该情况(公共数据集成资源组资源不足/独享数据集成资源组支持的并发数小于任务配置的并发数或者其他同步任务运行中导致剩余的资源不够下一个任务启动。它会处在长时间的等待状态,等上一个任务运行完毕之后,释放出足够的资源,下一个任务才可以启动运行。
3、任务一直处于run状态但是 卡在某个百分点不往下进行
(1)首先检查是不是配置了 presq| 或者 postsql ,在准备数据写入或者数据已经写入后执行了该sq|且该sq|执行时间过长
(2)查看 detail log 排查是否某个子线程取数时数据库端迟迟没返回结果)
4、读取数据库端数据时报链接超时异常(该情况需要调整数据库超时时间参数或者优化取数sq|等)。比如rds常见的链接超时异常,一般是15分钟必须返回结果,如果sql执行超过15分钟,rds数据库会报错误,这个是在数据库端可以调整的,也可以通过优化sql,加快sql查询速度,使结果尽量在短时间内返回,这样就可以避免错误。
5、网络不通(该情况需具体分析,一般情况为白名单没有加全或者独享资源组没有绑定装有网络)。
五、示例
1、配置一个 rdsmysql 同步到odps数据的任务,在 dataworks 的运维中心周期任务里可以查阅到这个任务。查看功能详情,可以看到具体的任务配置,也就是第一部分任务渲染之后,提交到数据集成资源组上的json配置,可以看到它是从mysql reader 到 odps writer 的一个任务,dt是用 bizdate 分区配置的。
2、看它具体的日志内容,第一部分的日志,第二行任务实际运行在哪个机器上,paravalue 就是的调度参数的配置和它的实际替换值。在 DataStudio 里面配置的就是被默认的一个 bizdate,目的srcds是数据源,skynet ID表示任务的节点ID,在明细里可以看到,时区gmt+8,下面都是系统参数,不用特别的关注,一个 region 信息,项目所在的地域,比较重要的一个参数,运行所在的调度资源组,就是一级任务分发的志愿组。下面是任务渲染之前的结果,用自己的调度参数替换了实际的分区,351576497是数据集成的实例 ID,basecommon_ group表示公共的数据资源组,detail log 是详细日志打印的地方,三个状态 submit,数据运行时资源组比较充足,所以它直接跳过了 run 状态,run 状态持续20秒钟,返回 sucess。
3、看第二部分,也就是 detail log。上面的信息基本上和第一部分是一致的,进入节点ID资源组等各个模块的信息,在info下面的第一个可以看到当前运行的资源组所使用的datax的版本,使用的是2019年12月17号的一个版本,这个版本是一个比较老的版本目前已经更新到2020年,如果在使用独享资源组时,如果版本过低,可以供单到这边升级优化,下面是任务渲染之后的状态,它就非常明细的信息,Tenanted 表示 dataworks 的工作id,下面包括jdbc数据源的信息,也会详细的打印出来。这样有助于后续排查任务运行情况,任务渲染信息看完之后。4、2020-10-1112:57:00.802 [ j 0b342977759] INFO 0riginalConfPret reatmentutil- table: [yanshi 1011 has co lumns: [id,nane. addr]
明显从数据库端获取表名和列信息的方式,这样可以方便就是快速识别表结构,检查是否是配置的列数,左右两边是否一致。由于在同步任务配置时,配置了的try catch参数,所以会执行一个try catch语句,先清空,再重新添加dt等于20201010的分区。根据rds mysql配置的是skynet ID,根据skynet ID值对mysql的数据进行切分,根据数据条数整体进行等分,切分成10块,也有明细的打印,就是开始实际的执行, 9个task,具体的执行某1个task,begin to read record by sql id小于等于2,取出来的数据会写到odps端。Finished to read record by sql
执行完,开始write block,执行完毕就它会明确的提示,此行程执行完毕,使用了多长时间,成功了多少条数据,失败了多少条数据,下面都是对submit sql进行执行,并且向目的端写入。执行完毕,并且写入完毕。这个任务没有出什么异常,最后打印出最终的结果。一共是9条数据,51个字节,速率是2b每秒,平均的记录没到0点每秒。0 records/s |Error 0 records ,0 bytes
作为参考值。读出记录总数是9,没有失败的,说明都已经全部写入成功了,这是全部的数据集成日志,这是一个成功的样例。这是关联型odps的样例,关于非关系型数据库,比如 hbase、redis等。