本文介绍错误码ODPS-0010000:System internal error的报错场景,并提供对应的解决方案。
错误1:fuxi job failed, caused by: kWorkerOutOfMemory(errCode:256) at Odps/xxx/xxx. Detail error msg: KILL_NAKILL_NA: plannedResource({Memory=xxx, CPU=xxx}) usedResource({Memory=xxx, CPU=xxx})
错误信息
ODPS-0010000:System internal error - fuxi job failed, caused by: kWorkerOutOfMemory(errCode:256) at Odps/xxx/xxx. Detail error msg: KILL_NAKILL_NA: plannedResource({Memory=xxx, CPU=xxx}) usedResource({Memory=xxx, CPU=xxx})
错误码描述
实际使用的资源大于计划使用的资源导致内存超用被杀。
解决方案
通过报错信息中的plannedResource与usedResource可以识别出计划使用资源与实际使用资源的数量,然后根据实际情况调整参数。报错信息中的Task类型分为M(mapper)、R(reducer)、J(joiner),根据报错信息执行SET操作,如odps.stage.mapper.mem、odps.stage.mapper.split.size。
错误2:fuxi job failed, caused by: Merge into statement not support update or delete duplicate row
错误信息
ODPS-0010000:System internal error - fuxi job failed, caused by: Merge into statement not support update or delete duplicate row, please check your query, the query text location is from [line m, column n] to [line i, column j]
错误码描述
Merge into语句不支持Update或Delete重复行,m行n列至i行j列的等号两边存在多行相同值导致膨胀输出重复行,引发Update或Delete失败。
解决方案
检查m行n列至i行j列的等号两边是否存在多行相同值,需要先对相同值进行去重操作才能避免报错。
错误3:OSSRequestException: req_id: xxxxxx, http status code: 400, error code
错误信息
ODPS-0010000:System internal error - build/release64/common/io/oss/oss_client.cpp(99): OSSRequestException: req_id: xxxxxx, http status code: 400, error code: InvalidArgument, message: Authorization header is invalid
错误码描述
OSS侧服务临时抖动,导致服务瞬时不可用。
解决方案
执行重跑一次。
错误4:OSSRequestException:Authorization header is invalid
错误信息
ODPS-0010000:System internal error - build/release64/common/io/oss/oss_client.cpp(99): OSSRequestException: req_id: xxxxx, http status code: 400, error code: InvalidArgument, message: Authorization header is invalid
错误码描述
没有权限访问OSS文件。
解决方案
给当前访问外表的用户授权访问对应OSS外表的权限。
错误5:Shortcut optimize failed because the script is too complex
错误信息
ODPS-0010000:System internal error - Shortcut optimize failed because the script is too complex
错误码描述
SQL复杂度高,导致快捷方式优化失败。
解决方案
优化SQL语句。例如对复杂的SQL进行拆分和简化,检查是否存在嵌套过深的子查询、过多的连接操作(JOIN)、复杂的聚合函数或窗口函数等。同时建议您减少数据处理量,使用适当的WHERE子句限制查询范围,或者利用分区表的优势,仅查询必要的分区。
错误6:alloc too large size
错误信息
ODPS-0010000:System internal error - fuxi job failed, caused by: alloc too large size: xxx
错误码描述
作业在运行过程中申请了过大的内存导致运行失败。可能是MaxCompute自身的Bug,也有可能是用户数据存在异常(例如ARRAY类型字段中包含的元素数量过多)。
解决方案
检查是否存在过大的ARRAY数据,并缩减ARRAY数据量。若还是无法解决,可以通过提交工单获取技术支持。
错误7:Regex compile error
错误信息
ODPS-0010000:System internal error - fuxi job failed, caused by: Regex compile error
错误码描述
正则表达式不合法。
解决方案
修改为正确的SQL语法。
错误8:failed to get error message of java exception because of outofmemoryerror
错误信息
ODPS-0010000:System internal error - failed to get error message of java exception because of outofmemoryerror
错误码描述
内存溢出导致程序报错。
解决方案
增加以下参数调大内存。
SET odps.sql.mapper.cpu=400;
SET odps.sql.mapper.memory=8192;错误9:codeGenCallBuiltinFunction fail in CopmareBase for function
错误信息
ODPS-0010000:System internal error - fuxi job failed, caused by: codeGenCallBuiltinFunction fail in CopmareBase for function: NEQ, xxx
错误码描述
报错多见于对不支持ARRAY类型的字段或表达式执行neq操作的场景,例如COLLECT_SET。
解决方案
使用支持对ARRAY类型的字段或表达式执行neq操作的函数,例如SIZE(ARRAY)!=0,详情请参见SIZE。或者将MaxCompute升级至最新版本。
错误10:process core dumped
错误信息
ODPS-0010000:System internal error - fuxi job failed, caused by: process core dumped
错误码描述
报错多见于对不支持ARRAY类型的字段或表达式执行neq操作的场景,例如COLLECT_SET。
解决方案
使用支持对ARRAY类型的字段或表达式执行neq操作的函数,例如SIZE(ARRAY)!=0,详情请参见SIZE。或者将MaxCompute升级至最新版本。
错误11:fuxi job failed, caused by: kWorkerOutOfMemory
错误信息
ODPS-0010000:System internal error - fuxi job failed, caused by: kWorkerOutOfMemory(errCode:256) at Odps/autonavi_location_20230831212 329151gio81xoniqh_SQL_0_1_0_job_0/R2_1@68d01417.na62#4533.
Detail error msg: KILL_NAKILL_NA: plannedResource ({Memory=4096, CPU=100}) usedResource ({Memory=5751, CPU=164}).
错误码描述
触发条件:从报错信息的SQL_0_1_0_job_0/R2_1中判断是Reduce阶段的R2_1部分发生OutOfMemory(OOM)。
解决思路:
plannedResource({Memory=4096, CPU=100}为这个任务计划使用的资源信息;
usedResource({Memory=5751, CPU=164}为任务运行时实际需要的资源信息;
解决方案
通过set设置发生OOM阶段的Memory,针对上述报错,Reduce阶段可以做如下设置:
set odps.sql.reducer.memory=6144;(这个值只需要大于usedResource中的memory即可)。set odps.sql.reducer.cpu=200;(这个值只需要大于usedResource中的cpu即可)。