MaxCompute LogView
Logview是MaxCompute Job提交后查看和Debug任务的工具。通过Logview可看到一个Job的如下内容:
- 任务的运行状态。
- 任务的运行结果。
- 任务的细节和每个步骤的进度。
查看Job logview的方法
odpscmd客户端命令
在使用odpscmd客户端执行sql命令时,Job提交到MaxCompute后,会生成Logview的链接并显示在job的详细信息中,例如如下命令:
odps@ YITIAN_BJ_MC>select count(*) from emp;
ID = 20200427025937110gqciz3pr2
Log view:
http://logview.odps.aliyun.com/logview/?h=http://service.cn.maxcompute.aliyun.com/api&p=YITIAN_BJ_MC&i=20200427025937110gqciz3pr2&token=TlBGUWxpTllRKzRMYmJ2TXppM294aTgwR09rPSxPRFBTX09CTzoxNzUzODE0MzI4NjM0Mjk4LDE1ODg1NjExNzcseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL3lpdGlhbl9ial9tYy9pbnN0YW5jZXMvMjAyMDA0MjcwMjU5MzcxMTBncWNpejNwcjIiXX1dLCJWZXJzaW9uIjoiMSJ9
Job Queueing.
----------------------------------------------------------------------------------------------
STAGES STATUS TOTAL COMPLETED RUNNING PENDING BACKUP
M1_job_0 ................. TERMINATED 1 1 0 0 0
R2_1_job_0 ............... TERMINATED 1 1 0 0 0
----------------------------------------------------------------------------------------------
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 5.51 s
----------------------------------------------------------------------------------------------
Summary:
resource cost: cpu 0.00 Core * Min, memory 0.00 GB * Min
inputs:
yitian_bj_mc.emp: 14 (1721 bytes)
outputs:
Job run time: 0.000
Job run mode: service job
Job run engine: execution engine
...
可以直接在浏览器上打开Logview链接,进入查看Job的信息。例如这里在浏览器中打开上面的logview地址:
MaxCompute Studio脚本执行
在使用MaxCompute Studio执行SQL语句时,没有可视化的给出logview的地址,需要使用如下步骤进行查看。
1. 获取SQL语句执行的Job实例ID(instanceid)。MaxCompute Studio执行完SQL语句后,会出现一个Job的执行页面,其中包含了该instance的id,如下:
2. 使用wait instanceid;命令获取该instance的详细信息,其中包括该job实例的logview链接。在odpscmd中执行如下命令:
odps@ YITIAN_BJ_MC>wait 20200425123054590g4qg0tsa;
ID = 20200425123054590g4qg0tsa
Log view:
http://logview.odps.aliyun.com/logview/?h=http://service.cn.maxcompute.aliyun.com/api&p=YITIAN_BJ_MC&i=20200425123054590g4qg0tsa&token=QzNzdk4rUk4zZnlpQmxZQ2x0V1Q5N2wvMmlVPSxPRFBTX09CTzoxNzUzODE0MzI4NjM0Mjk4LDE1ODg0MjczMTMseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL3lpdGlhbl9ial9tYy9pbnN0YW5jZXMvMjAyMDA0MjUxMjMwNTQ1OTBnNHFnMHRzYSJdfV0sIlZlcnNpb24iOiIxIn0=
Job Queueing.
Summary:
resource cost: cpu 0.00 Core * Min, memory 0.00 GB * Min
inputs:
yitian_bj_mc.maxcomputefee: 1996 (20833 bytes)
outputs:
Job run time: 0.000
Job run mode: service job
Job run engine: execution engine
...
同样,可以在浏览器中直接打开上面的logview页面,查看该job实例的运行情况:
Logview功能使用
Logview功能组件
下面结合具体的Logview Web UI界面,介绍每个组件的含义。
Logview的首页分成上下两部分:
- Instance信息
- Task信息
Instance信息
在Logview页面中,上半部分是提交的SQL任务对应的MaxCompute Instance信息,包含URL链接、项目、InstanceID、提交人、开始时间、结束时间和状态(Status)等。
- Instance信息部分,可以单击Status查看当前队列的Status详细信息,包含四种状态:
- Waiting:说明当前作业正在MaxCompute中处理,并没有提交到分布式调度系统(Fuxi)中运行。
- Waiting List : n:说明作业已提交至分布式调度系统(Fuxi)排队等待运行,当前在队列中处于第n位。
- Running:作业在分布式调度系统(Fuxi)中运行。
说明 处于Terminated状态的Instance由于作业已处理完成,因此不存在队列信息。
- 单击Status查看队列详细信息:
- Sub Status:表示当前子状态信息。
- WaitPos:表示排队位置,如果是
0
表示正在运行,如果为-
表示尚未到Fuxi。 - QueueLength:表示Fuxi中总的队列长度。
- Total Priority:表示作业运行时经过系统判断后授予的优先级。
- SubStatus History:单击后,可以查看作业执行的详细历史状态,包含状态码、状态描述、开始时间、持续时间等(某些版本暂时无历史信息)。
Task 信息
在Logview页面中,下半部分为该Instance对应的task信息,包括任务名称、类型、状态、运行结果(Result)、详细信息(Detail)、开始时间、结束时间、总运行时间(Latency)、进度。其中,Latency指运行总共消耗的时间,与其他页面的Latency含义类似。
Result:在Job运行结束后,可以看到运行结果。例如上面SQL的结果如下图所示:
Detail:一个Job在运行中和结束后,均可以单击Detail来查看任务运行的具体情况。
在MaxCompute Task详细信息对话框中,可以查看以下信息:
- 一个MaxCompute Task可以由一个或多个Fuxi Job组成。例如,如果提交的SQL任务较为复杂,MaxCompute将自动向分布式调度系统(Fuxi)提交多个Fuxi Job。
- 每个Fuxi Job可以由一个或多个Fuxi Task组成。例如,简单的MapReduce任务通常会产生两个Fuxi Task,即Map Task(M1)和Reduce Task(R2)。而一个比较复杂的SQL任务也可能产生多个Fuxi Task。
- 查看所产生的Fuxi Task的任务名称。任务名称一般由字母和数字组成,其中字母表示任务类型(例如,M代表Map Task),数字标识任务编号以及依赖关系(例如,R5_4表示该Reduce Task需要J4任务执行结束后才会开始执行;J4_1_2_3则表示该Join Task需要M1、M2、M3这三个任务都执行完成后才会开始执行)。
- I/O Records表示这个task的输入和输出的records数。
单击Fuxi Task最右侧的查看列中的按钮或双击该Fuxi Task,可以查看该Fuxi Task对应的Instance信息。说明:每个Fuxi Task由一个或多个Fuxi Instance组成。当Fuxi Task的输入数据量持续增大时,MaxCompute将自动为该Task启动更多的节点来处理数据,每个节点即对应一个Fuxi Instance。
在页面下方的Fuxi Instance信息部分,Logview将处于不同阶段的Instance进行分组展示。例如,可以选择Failed组,查看运行出错的节点。同时,可以单击StdOut和StdErr列中的按钮查看标准输出信息和标准错误信息。说明:在所提交的MaxCompute任务中编写的打印信息也将在标准输出信息和标准错误信息中展示。
使用Logview排查问题
出错的任务
当有任务出错时,可以在Logview页面的Result中看到错误的提示信息,也可以在Detail页面中通过Fuxi Instance的stderr,查看具体某个Instance出错的信息。
数据倾斜
运行缓慢有时是由于在某个Fuxi Task的所有Fuxi Instance中,有个别Instance形成长尾造成的。长尾的现象由同一个Task内任务分配不均导致。这时可以在任务运行完后,在Summay标签页中看运行结果。在每个Task中都可以看到如下输出:
output records:
R2_1_Stg1: 199998999 (min: 22552459, max: 177446540, avg: 99999499)
此处如果min和max值相差较大,不在一个数量级,说明在这一阶段出现了数据倾斜。例如在执行字段Join时,某个字段中有一个值出现的比例很高,则在这一字段上执行Join就会出现数据倾斜。