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就會出現數據傾斜。