本文为您介绍错误码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行。可根据实际情况酌情调小。 |