本文介紹錯誤碼ODPS-0123144:Fuxi job failed的報錯情境,並提供對應的解決方案。
錯誤:kInstanceMonitorTimeout(errCode:252) at Odps/xxx/xxx. Detail error msg: CRASH_EXIT, usually caused by bad udf performance
錯誤資訊
ODPS-0123144: Fuxi job failed - kInstanceMonitorTimeout(errCode:252) at Odps/xxx/xxx. Detail error msg: CRASH_EXIT, usually caused by bad udf performance.
錯誤碼描述
MaxCompute UDF處理時間過長導致逾時。預設情況下UDF處理資料的時間是有限制,在處理一批(通常情況下為1024條)記錄時,必須在1800秒內處理完。這個時間限制並不是針對Worker的總已耗用時間,而是處理一小批記錄的時間。通常情況下SQL處理資料的速率超過了萬條/秒,該限制只是為了防止MaxCompute UDF中出現死迴圈,導致長時間佔用CPU資源的情況。
解決方案
如果PyODPS在MaxCompute UDF代碼中增加日誌,用於檢查代碼中是否有死迴圈問題,或者可以在日誌裡列印時間資訊來檢查MaxCompute UDF處理單條資料的時間長度是否符合預期。代碼中需要增加如下列印日誌相關資訊,作業運行成功後,您可以在Logview的StdOut中擷取到日誌資訊。
如果用的Java UDF可以參考效能問題。
Python 2環境
sys.stdout.write('your log') sys.stdout.flush()Python 3環境
print('your log', flush=True)
如果實際計算量很大,MaxCompute UDF預計的已耗用時間很長,可以通過調整如下參數避免逾時報錯。
set odps.function.timeout=xxx;
調整UDF運行逾時時間長度。預設值為1800s。可根據實際情況酌情調大。取值範圍為1s~3600s。
set odps.sql.executionengine.batch.rowcount=xxx;
調整MaxCompute一次處理的資料行數。預設值為1024行。可根據實際情況酌情調小。