更新时间:2025-07-08 GMT+08:00
分享

作业执行失败排查思路

作业执行失败,有如下场景:

场景1:作业显示运行正常,但实际作业中的某一个应用运行失败

如果作业显示运行正常,但实际作业中的某一个应用运行失败,请检查输入数据是否正常,并修改算法程序入口的main函数,保证运行结果有显式的返回值。

排查思路

作业运行时,每个应用称之为一个任务(Task)。部分场景下,任务输入数据异常,实际作业运行失败,但界面显示运行正常。

作业中子任务没有返回正确的值,但是容器仍正常退出return 0,此时判定为子任务已正确执行。

实际上作业的子任务对应的就是K8S中的一个Pod,其返回状态就是Pod的phase映射,即容器以非0状态退出或者被系统终止会算作失败;容器return 0并且不再重启即算成功。详细内容介绍请参见Pod的生命周期

解决方法

所有的算法程序的入口main函数都显式的给出返回值,即正确执行则return 0。其他异常场景return其他数值或者抛出异常,并输出相关日志。

# python  
 def funcA(): 
     try: 
       doSomething(); 
     except: 
       log.print("An exception occurred, xxxxx"); 
       raise 自定义异常; 
 def funcB(): 
     result = doSomething(); 
     return result; 
 if __name__ == '__main__': 
     funcA(); 
     result = funcB(); 
     if result:  
        sys.exit(1); 
     else: 
         sys.exit(0);
# c++ 
int main(){ 
    int result = doSomething(); 
     if(result != 0){ 
         return -1; 
     } 
     else{ 
        return 0; 
      } 
}

场景2:作业投递后处于运行中,运行过程正常,但是最后超时失败

图1 超时失败作业示例

排查思路

判断是否是作业超时。作业详情右上角可查看失败原因,若为Graph timeOut for executin xxx,则可以确认为作业超时失败。

解决方法

根据实际业务需要,在“创建作业”阶段,设置合适的超时时间,默认设置的超时时间为24小时(1440分钟),最大可设置为144000分钟,即作业运行至多100天。

图2 作业设置

场景3:作业投递后显示运行成功,但是根据日志分析作业有报错,也未能正确输出相关信息

图3 无日志打印

排查思路

  1. 首先需要用户自行确认投递的作业是否会在控制台打印日志,如果是有重定向日志输出到具体文件,则此处无日志为正常现象。
  2. 子任务的事件中,确认作业子任务的实例是否有正常创建。
    图4 子任务事件
  3. 查看子任务中实例的事件,查看实例是否有正常创建。
    图5 子任务中实例的事件

解决方法

  • 若子任务未正常创建,请联系服务技术支持解决。
  • 若子任务正常创建,但是实例未正常创建,可以通过事件信息分析,常见有以下问题场景和对应解决方案。
    • 0/4 nodes are available: XXX Insufficient cpu 或者 XXX Insufficient memory。该场景表示当前集群中无充足的计算资源,可以根据实际需要提前结束掉其他作业或notebook来释放资源,也可以进入资源订购页面管理集群购买新节点。
    • 其他场景可以联系服务技术支持解决。
图6 购买计算资源

场景4:作业投递后显示运行成功,但是根据日志分析作业有报错,也未能正确输出相关信息

排查思路、解决方法请参考查看执行结果章节的说明。

场景5:参数配置的不合理导致的作业执行失败

解决方法

  1. 选择运行失败的分析作业,单击操作“更多>重试”
  2. 在弹出的提示框中选择“更改参数”。
    图7 更改参数
  3. 在作业配置页面,修改相关参数后,单击页面右上角的“重试作业”。
    图8 重试作业

相关文档