Cancelamento da execução de trabalhos do EMR Sem Servidor com período de tolerância - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Cancelamento da execução de trabalhos do EMR Sem Servidor com período de tolerância

Em sistemas de processamento de dados, terminações abruptas podem levar ao desperdício de recursos, operações incompletas e possíveis inconsistências de dados. O Amazon EMR Sem Servidor permite que você especifique um período de tolerância ao cancelar a execução de trabalhos. Esse recurso permite tempo para a limpeza adequada e a conclusão do trabalho em andamento antes do término do trabalho.

Ao cancelar a execução de um trabalho, especifique um período de tolerância (em segundos) usando o parâmetro shutdownGracePeriodInSeconds durante o qual o trabalho pode realizar operações de limpeza antes do término final. O comportamento e as configurações padrão variam entre trabalhos em lote e de transmissão.

Período de tolerância para trabalhos em lote

Para trabalhos em lote, o EMR Sem Servidor permite que você implemente operações de limpeza personalizadas que são executadas durante o período de tolerância. Você pode registrar essas operações de limpeza como parte do hook de desligamento da JVM no código da aplicação.

Comportamento padrão

O comportamento padrão para o desligamento é não ter período de tolerância. Consiste nas duas ações a seguir:

  • Término imediato

  • Os recursos são liberados imediatamente

Opções de configuração

Você pode especificar configurações que resultam em um desligamento normal:

  • Intervalo válido para o período de tolerância de desligamento: 15 a 1800 segundos (opcional)

  • Término imediato (sem período de tolerância): 0 segundo

Habilitar desligamento normal

Para implementar o desligamento normal para trabalhos em lote, siga estas etapas:

  1. Adicione um hook de desligamento no código da sua aplicação contendo uma lógica de desligamento personalizada.

    Example in Scala
    import org.apache.hadoop.util.ShutdownHookManager // Register shutdown hook with priority (second argument) // Higher priority hooks run first ShutdownHookManager.get().addShutdownHook(() => { logger.info("Performing cleanup operations...") }, 100)

    Usar o ShutdownHookManager

    Example in PySpark
    import atexit def cleanup(): # Your cleanup logic here print("Performing cleanup operations...") # Register the cleanup function atexit.register(cleanup)
  2. Especifique um período de tolerância ao cancelar o trabalho para permitir que os hooks adicionados anteriormente sejam executados.

    Exemplo

    # Default (immediate termination) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID # With 5-minute grace period aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 300

Período de tolerância para trabalhos de transmissão

No Spark Structured Streaming, em que os cálculos envolvem leitura ou gravação em fontes de dados externas, desligamentos abruptos podem levar a resultados indesejados. As tarefas de transmissão processam dados em microlotes, e interromper essas operações no meio do caminho pode resultar em processamento duplicado em tentativas subsequentes. Isso acontece quando o ponto de verificação mais recente do microlote anterior não foi gravado, fazendo com que os mesmos dados sejam processados novamente quando o trabalho de transmissão for reiniciado. Esse processamento duplicado não só desperdiça recursos de computação, como também pode afetar as operações comerciais, tornando crucial evitar paralisações abruptas.

O EMR Sem Servidor fornece suporte integrado para um desligamento normal por meio de um receptor de consultas de transmissão. Isso garante a conclusão adequada dos microlotes contínuos antes do término do trabalho. O serviço gerencia automaticamente o desligamento normal entre microlotes para aplicações de transmissão, garantindo que o microlote atual conclua o processamento, que os pontos de verificação sejam gravados adequadamente e que o contexto de transmissão seja encerrado de forma limpa, sem ingerir novos dados durante o processo de desligamento.

Comportamento padrão

  • Período de tolerância de 120 segundos habilitado por padrão.

  • O receptor de consultas de transmissão integrado gerencia o desligamento normal.

Opções de configuração

  • Intervalo válido para o período de tolerância de desligamento: 15 a 1800 segundos (opcional)

  • Término imediato: 0 segundo

Habilitar desligamento normal

Para implementar um desligamento normal para trabalhos de transmissão:

Especifique um período de tolerância ao cancelar o trabalho para permitir que o microlote em andamento seja concluído.

Exemplo

# Default graceful shutdown (120 seconds) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID # Custom grace period (e.g. 300 seconds) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 300 # Immediate Termination aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 0

Adicione hooks de desligamento personalizados (opcional)

Enquanto o EMR Sem Servidor gerencia o desligamento normal por padrão por meio de seu receptor de consultas de transmissão integrado, você pode, opcionalmente, implementar uma lógica de desligamento personalizada para consultas de transmissão individuais. O EMR Serverless registra seu elegante ouvinte de desligamento com prioridade 60 (usando). ShutdownHookManager Como os hooks de maior prioridade são executados primeiro, você pode registrar suas operações de limpeza personalizadas com uma prioridade maior que 60 para garantir que elas sejam executadas antes do início do processo de desligamento do EMR Sem Servidor.

Para adicionar um hook personalizado, consulte o primeiro exemplo neste tópico que mostra como adicionar um hook de desligamento no código da aplicação. Aqui, 100 é a prioridade, que é maior que 60. Portanto, esse hook de desligamento funciona primeiro.

nota

Hooks de desligamento personalizados são opcionais e não são necessários para uma funcionalidade de desligamento normal, que é gerenciada automaticamente pelo EMR Sem Servidor.

Cobranças do período de tolerância e duração do lote

Se o valor padrão para o período de tolerância (120 segundos) for usado:

  • Se a duração do lote for inferior a 120 segundos, apenas haverá cobranças pelo tempo real necessário para concluir o lote.

  • Se a duração do lote exceder 120 segundos, a cobrança ocorrerá com base no período máximo de tolerância (120 segundos), mas a consulta poderá não ser encerrada normalmente, pois será encerrada à força.

Para otimizar os custos e garantir um desligamento adequado:

  • Para durações de lote superiores a 120 segundos: considere aumentar o período de tolerância para corresponder à duração do seu lote

  • Para lotes com duração inferior a 120 segundos: não é necessário ajustar o período de tolerância, pois você só será cobrado pelo tempo real de processamento

Considerações

Comportamento durante o período de tolerância

  • O período de tolerância fornece tempo para que seus hooks de desligamento registrados sejam concluídos.

  • O trabalho termina assim que o processo de desligamento termina, mesmo que seja bem antes do período de tolerância.

  • Se as operações de limpeza excederem o período de tolerância, o trabalho será encerrado à força.

Comportamento do serviço

  • O encerramento do período de tolerância apenas está disponível para trabalhos no estado RUNNING.

  • Solicitações de cancelamento subsequentes durante o estado CANCELLING serão ignoradas.

  • Se o EMR Sem Servidor falhar em iniciar o desligamento do período de tolerância devido a erros internos de serviço:

    • O serviço será repetido por até 2 minutos.

    • Se as novas tentativas não tiverem êxito, o trabalho será encerrado à força.

Faturamento

Os trabalhos são cobrados pelos recursos computacionais usados até o encerramento completo do trabalho, incluindo qualquer tempo gasto durante o período de tolerância.