es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

org.apache.flink.runtime.checkpoint.CheckpointException: Algunas tareas del trabajo ya han terminado

Quiero detener una tarea de Flink mediante una API REST, y envío la solicitud: http://192.168.215.165:8081/jobs/c952ba860604a2c32a7abb9eb5b42b0d/stop, luego obtengo la respuesta:

{
    "request-id": "29c559399243c817055ebbaf7431a8d2"
}

Y luego envío la solicitud: http://192.168.215.165:8081/jobs/c952ba860604a2c32a7abb9eb5b42b0d/savepoints/29c559399243c817055ebbaf7431a8d2, obtengo la respuesta (parte de ella):

{
    "status": {
        "id": "COMPLETED"
    },
    "operation": {
        "failure-cause": {
            "class": "java.util.concurrent.CompletionException",
            "stack-trace": "java.util.concurrent.CompletionException: org.apache.flink.runtime.checkpoint.CheckpointException: Some tasks of the job have already finished and checkpointing with finished tasks is not enabled. Failure reason: Not all required tasks are currently running.\n\tat java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:326)\n\tat java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:338)\n\tat java.util.concurrent.CompletableFuture.uniRelay(CompletableFuture.java:925)\n\tat java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:913)\n\tat java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)\n\tat java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)\n\tat org.apache.flink.runtime.rpc.akka.AkkaInvocationHandler.lambda$invokeRpc$0(AkkaInvocationHandler.java:246)\n\tat java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)\n\tat java.util.concurrent.

¿Cómo puedo detener un trabajo de Flink mediante API REST, por favor?

Tags:  

Answer

  1. Avatar for davy.ai

    Para detener un trabajo de Flink utilizando la API REST, debes enviar una solicitud POST al siguiente endpoint:

    http://localhost:8081/jobs/:jobid/stop
    

    Donde :jobid es el jobId del trabajo de Flink que deseas detener.

    En tu caso, la solicitud enviada es correcta:

    http://192.168.215.165:8081/jobs/c952ba860604a2c32a7abb9eb5b42b0d/stop
    

    La respuesta que recibiste indica que la solicitud se realizó correctamente y Flink ha generado un ID de solicitud para la operación:

    { "request-id": "29c559399243c817055ebbaf7431a8d2" }
    

    Para guardar el estado de un trabajo de Flink utilizando la API REST, debes enviar una solicitud POST al siguiente endpoint:

    http://localhost:8081/jobs/:jobid/savepoints
    

    Donde :jobid es el jobId del trabajo de Flink que deseas guardar.

    En tu caso, enviaste la solicitud al endpoint correcto:

    http://192.168.215.165:8081/jobs/c952ba860604a2c32a7abb9eb5b42b0d/savepoints/29c559399243c817055ebbaf7431a8d2
    

    Sin embargo, la respuesta que recibiste indica que la operación falló debido a que algunas tareas del trabajo ya han finalizado y no se ha habilitado la creación de puntos de control con tareas finalizadas. Para resolver esto, debes habilitar la creación de puntos de control con tareas finalizadas para el trabajo configurando la opción de configuración state.checkpoints.allow-non-restored-state en true.

    En resumen, para detener un trabajo de Flink mediante la API REST, envía una solicitud POST al endpoint /jobs/:jobid/stop con el jobId del trabajo que deseas detener. Para guardar el estado de un trabajo de Flink, envía una solicitud POST al endpoint /jobs/:jobid/savepoints con el jobId del trabajo que deseas guardar. Si encuentras un error debido a tareas finalizadas, habilita la creación de puntos de control con tareas finalizadas configurando la opción de configuración state.checkpoints.allow-non-restored-state en true.

Comments are closed.