在机器学习PAI用的逻辑回归这一步会报错是因为什么?

在机器学习PAI用的逻辑回归这一步会报错是因为什么?00f3dea6903ccb059cf78625d66943b6.png
org.apache.flink.runtime.JobException: Recovery is suppressed by NoRestartBackoffTimeStrategy

at org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.handleFailure(ExecutionFailureHandler.java:138) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.getFailureHandlingResult(ExecutionFailureHandler.java:82) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.scheduler.DefaultScheduler.handleTaskFailure(DefaultScheduler.java:207) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.scheduler.DefaultScheduler.maybeHandleTaskFailure(DefaultScheduler.java:197) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.scheduler.DefaultScheduler.updateTaskExecutionStateInternal(DefaultScheduler.java:188) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.scheduler.SchedulerBase.updateTaskExecutionState(SchedulerBase.java:677) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.scheduler.SchedulerNG.updateTaskExecutionState(SchedulerNG.java:79) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.jobmaster.JobMaster.updateTaskExecutionState(JobMaster.java:435) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source) ~[?:?]

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_381]

at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_381]

at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcInvocation(AkkaRpcActor.java:305) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:212) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:77) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleMessage(AkkaRpcActor.java:158) ~[flink-dist_2.11-1.13.1.jar:1.13.1]

at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:26) [flink-dist_2.11-1.13.1.jar:1.13.1]

at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:21) [flink-dist_2.11-1.13.1.jar:1.13.1]

at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123) [flink-dist_2.11-1.13.1.jar:1.13.1]

at akka.japi.pf.UnitCaseStatement.applyOrElse(CaseStatements.scala:21) [flink-dist_2.11-1.13.1.jar:1.13.1]

at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:170) [flink-dist_2.11-1.13.1.jar:1.13.1]

at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:171) [flink-dist_2.11-1.13.1.jar:1.13.1]

at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:171) [flink-dist_2.11-1.13.1.jar:1.13.1]

at akka.actor.Actor$class.aroundReceive(Actor.scala:517) [flink-dist_2.11-1.13.1.jar:1.13.1]

at akka.actor.AbstractActor.aroundReceive(AbstractActor.scala:225)

展开
收起
三分钟热度的鱼 2023-12-28 15:56:18 81 分享 版权
阿里云 AI 助理回答

问题分析

根据您提供的报错信息,org.apache.flink.runtime.JobException: Recovery is suppressed by NoRestartBackoffTimeStrategy,结合知识库中的相关资料,可以判断该问题与Flink作业的故障恢复策略有关。具体来说,Flink在任务失败时尝试恢复,但由于配置了NoRestartBackoffTimeStrategy(即不重启策略),导致任务无法自动恢复并最终失败。

以下是可能导致该问题的原因及解决方案:


报错原因及解决方案

1. 故障恢复策略配置不当

  • 原因
    Flink默认支持多种故障恢复策略,例如固定间隔重启、指数退避重启等。如果配置了NoRestartBackoffTimeStrategy,则表示任务失败后不会尝试重启,直接终止任务。

  • 解决方案
    修改Flink作业的重启策略,确保在任务失败时能够自动恢复。可以通过以下方式调整:

    • 设置固定间隔重启策略
    restart-strategy: fixed-delay
    restart-strategy.fixed-delay.attempts: 3
    restart-strategy.fixed-delay.delay: 10s
    
    • 设置指数退避重启策略
    restart-strategy: exponential-delay
    restart-strategy.exponential-delay.initial-backoff: 10s
    restart-strategy.exponential-delay.max-backoff: 60s
    restart-strategy.exponential-delay.backoff-multiplier: 2.0
    restart-strategy.exponential-delay.reset-backoff-threshold: 5m
    
    • 配置方法
      在Flink的flink-conf.yaml文件中添加上述配置,或者通过代码动态设置:
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, Time.seconds(10)));
    

2. Checkpoint失败导致任务无法恢复

  • 原因
    如果Flink作业的Checkpoint频繁失败,且未正确配置Checkpoint容忍失败次数(execution.checkpointing.tolerable-failed-checkpoints),可能会导致任务触发Failover并最终失败。

  • 解决方案
    调整Checkpoint相关参数以提高容错能力:

    • 增加Checkpoint超时时长
    execution.checkpointing.timeout: 10min
    
    • 设置Checkpoint容忍失败次数
    execution.checkpointing.tolerable-failed-checkpoints: 3
    
    • 检查Kafka Sink的并发Checkpoint限制
      如果使用Kafka作为Sink,可能需要调整Kafka生产者池大小或减少并发Checkpoint数量:
    execution.checkpointing.concurrent-checkpoints: 1
    

3. State数据过大导致任务失败

  • 原因
    如果逻辑回归模型的State数据过大(例如单个Key对应的State超过2GB),可能会导致内存溢出(OOM)或临时数组申请失败,从而引发任务失败。

  • 解决方案

    • 优化窗口大小
      如果是Window算子导致的State数据过大,建议减小窗口大小以降低State累积量。
    • 调整作业逻辑
      检查是否可以通过拆分Key或其他方式优化State存储。

4. 自定义连接器未正确上传

  • 原因
    如果逻辑回归任务依赖自定义连接器,但连接器未正确上传到OSS,可能会导致任务启动失败。

  • 解决方案
    确保自定义连接器已正确上传到OSS,并在作业配置中指定连接器路径。具体操作请参考[管理自定义连接器]。


5. 其他潜在问题

  • 原因
    根据知识库中的其他案例,可能存在以下问题:

    • 输入数据格式错误(如INPUT_FORMAT_ERROR)。
    • 数据类型不支持(如Parse exception - invalid token)。
  • 解决方案

    • 检查输入数据格式
      确保输入数据符合逻辑回归模型的要求,必要时使用json.dumps将数据序列化为字符串。
    • 过滤不支持的数据类型
      仅支持BooleanBigintDoubleStringDatetime五种数据类型,建议提前进行类型转换或过滤。

总结与建议

  1. 优先检查故障恢复策略
    确保Flink作业配置了合理的重启策略,避免因NoRestartBackoffTimeStrategy导致任务直接终止。

  2. 优化Checkpoint配置
    增加Checkpoint超时时长和容忍失败次数,确保任务在Checkpoint失败时能够继续运行。

  3. 排查State数据问题
    如果State数据过大,建议优化窗口大小或调整作业逻辑。

  4. 验证输入数据格式
    确保输入数据符合逻辑回归模型的要求,避免因数据格式或类型问题导致任务失败。

通过以上步骤,您可以有效解决Recovery is suppressed by NoRestartBackoffTimeStrategy报错问题。如果问题仍未解决,请提供更多上下文信息以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。

热门讨论

热门文章

还有其他疑问?
咨询AI助理