概述
Logview是一个在ODPS Job提交后查看和Debug任务的工具。可看到的内容有:
- 任务的运行状态
- 任务的运行结果
- 任务的细节和每个步骤的进度
在用odpscmd提交任务时,会自动生成Logview的链接。生成的链接中的最后一部分是token,这是用户打开该页面并查看job信息的钥匙,Logview页面的有效期为一周。
Logview配置
注意调用odps cli 客户端时配置logview host
测试环境
生产环境
客户端任务执行例子
登录统一验证机,执行查询命令
简单查询只会及时返回信息
使用函数会触发MR过程
root@ydt-acp-dcp01:/home/admin #odpscmd -e "select count(*) from report;"
ID = 20170321025448540g69z705
Log view:
http://logview.cnxxxxxxt-it.com:9000/logview/?h=http://service.cxxxxxt-it.com/api&p=cloud_report&i=20170321025448540g69z705&token=RDdlRGhQVEdLa3RuUXI3aDBmRExYR05jS29RPSxPRFBTX09CTzoxNjEzNjM1MTMxMDMwODQzLDE0OTA2Njk2ODgseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2Nsb3VkX3JlcG9ydC9pbnN0YW5jZXMvMjAxNzAzMjEwMjU0NDg1NDBnNjl6NzA1Il19XSwiVmVyc2lvbiI6IjEifQ==
Summary:
resource cost: cpu 0.00 Core * Min, memory 0.00 GB * Min
inputs:
cloud_report.report: 0 (0 bytes)
outputs:
Job run time: 0.000
Job run mode: service job
M1_Stg1:
instance count: 1
run time: 0.000
instance time:
min: 0.000, max: 0.000, avg: 0.000
input records:
input: 0 (min: 0, max: 0, avg: 0)
output records:
R2_1_Stg1: 1 (min: 1, max: 1, avg: 1)
R2_1_Stg1:
instance count: 1
run time: 0.000
instance time:
min: 0.000, max: 0.000, avg: 0.000
input records:
input: 1 (min: 1, max: 1, avg: 1)
output records:
R2_1_Stg1FS_4108230: 1 (min: 1, max: 1, avg: 1)
+------------+
| _c0 |
+------------+
| 0 |
+------------+
root@ydt-acp-dcp01:/home/admin #
查看logview分析页面
下面结合具体的 UI界面来说明每个组件的含义。
登录上述客户端运行后返回的logview地址
在Logview的首页,上方为用户提交的SQL生成的ODPS Instance,每个SQL提交后会生成唯一的ID。Latency指的运行总共消耗的时间,别的页面的latency含义类似。 下方是该task的说明,其中的两项说明一下:
- Result: 在Job运行结束后,可以看到运行结果,如一条select SQL的结果如下图。
- Detail: 在Job中运行中和结束后,均可以点击Detail来查看任务运行的具体情况。
- 点击上图result 右边的 detail
一个ODPS Task由一个或者多个Fuxi Job组成。例如当用户的SQL任务十分复杂时,ODPS会向Fuxi提交多个Fuxi Job。
每个Fuxi Job由一个或者多个Fuxi Task组成。简单的MapReduce通常会产生两个Fuxi Task,一个是Map一个是Reduce,用户会见到两个Fuxi Task的名字分别为M1和R2,当SQL比较复杂时,可能会产生多个Fuxi Task。
在每个Task中,可以看到Task的名字,对于M1_stg1,表示这是一个Map task,stage为1。R2_1_stg1中间的1表示它依赖M1执行结束才能开始执行。同理,J5_2_4_Stg2表示Join5这个阶段要依赖R2和M4两个task完全成才能启动运行。I/O Records表示这个task的输入和输出的records数。
每个Fuxi Task由一个或者多个Fuxi Instance组成,当用户的输入数据量变大时,ODPS会在每个Task启动更多的节点来处理数据。每个节点就是一个Fuxi Instance。双击Fuxi Task最右边一栏查看,或者直接双击该行,就可以打开具体的Fuxi Instance信息。
在页面的下方,Logview为不同阶段的Instance进行了分组,查看出错的节点可以选择Failed栏。
在StdOut和StdErr两栏中,可以查看标准输出和标准错误信息,用户自己打印的信息也可以在这里查看。
问题排查
出错的任务
当有任务出错时,用户可以在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就会出现数据倾斜。