Quando configurar eventos do EMR no CloudWatch
Para algumas APIs de sondagem, como DescribeCluster, DescribeStep e ListClusters, a configuração de um evento do CouldWatch pode reduzir o tempo de resposta a alterações e liberar suas cotas de serviço. Por exemplo, se você tiver uma função do Lambda configurada para ser executada quando o estado de um cluster for alterado, como quando uma etapa for concluída ou um cluster for encerrado, você poderá usar esse acionador para iniciar a próxima ação em seu fluxo de trabalho em vez de aguardar pela próxima sondagem. Caso contrário, se você tiver instâncias dedicadas do Amazon EC2 ou funções do Lambda sondando constantemente a API do EMR em busca de alterações, você não somente desperdiçará recursos de computação, mas também poderá atingir sua cota de serviço.
A seguir são apresentados alguns casos nos quais você pode se beneficiar ao migrar para uma arquitetura orientada a eventos.
Caso 1: sondagem do EMR usando chamadas da API DescribeCluster para conclusão de uma etapa
exemplo Sondagem do EMR usando chamadas da API DescribeCluster para conclusão de uma etapa
Um padrão comum é enviar uma etapa para um cluster em execução e sondar o Amazon EMR para obter o status da etapa, normalmente, usando as APIs DescribeCluster ou DescribeStep. Essa tarefa também pode ser realizada com atraso mínimo ao se conectar ao evento de alteração de etapa ou de status do Amazon EMR.
Este evento inclui as informações apresentadas a seguir em sua carga útil.
{ "version": "0", "id": "999cccaa-eaaa-0000-1111-123456789012", "detail-type": "EMR Step Status Change", "source": "aws.emr", "account": "123456789012", "time": "2016-12-16T20:53:09Z", "region": "us-east-1", "resources": [], "detail": { "severity": "ERROR", "actionOnFailure": "CONTINUE", "stepId": "s-ZYXWVUTSRQPON", "name": "CustomJAR", "clusterId": "j-123456789ABCD", "state": "FAILED", "message": "Step s-ZYXWVUTSRQPON (CustomJAR) in Amazon EMR cluster j-123456789ABCD (Development Cluster) failed at 2016-12-16 20:53 UTC." } }
No mapa detalhado, uma função do Lambda pode analisar “state”, “stepId” ou “clusterId” para localizar informações pertinentes.
Caso 2: sondagem do EMR para clusters disponíveis para a execução de fluxos de trabalho
exemplo Sondagem do EMR para clusters disponíveis para a execução de fluxos de trabalho
Um padrão para clientes que executam vários clusters é executar fluxos de trabalho em clusters assim que estiverem disponíveis. Se houver diversos clusters em execução e um fluxo de trabalho precisar ser executado em um cluster que está aguardando, um padrão poderia ser sondar o EMR usando as chamadas de API DescribeCluster ou ListClusters para pesquisar os clusters disponíveis. Outra maneira de reduzir o atraso em saber quando um cluster está pronto para uma etapa seria processar o evento de alteração de estado do cluster do Amazon EMR.
Este evento inclui as informações apresentadas a seguir em sua carga útil.
{ "version": "0", "id": "999cccaa-eaaa-0000-1111-123456789012", "detail-type": "EMR Cluster State Change", "source": "aws.emr", "account": "123456789012", "time": "2016-12-16T20:43:05Z", "region": "us-east-1", "resources": [], "detail": { "severity": "INFO", "stateChangeReason": "{\"code\":\"\"}", "name": "Development Cluster", "clusterId": "j-123456789ABCD", "state": "WAITING", "message": "Amazon EMR cluster j-123456789ABCD ..." } }
Para este evento, uma função do Lambda pode ser configurada para enviar imediatamente um fluxo de trabalho em espera para um cluster assim que seu status for alterado para WAITING.
Caso 3: sondagem do EMR para o encerramento de um cluster
exemplo Sondagem do EMR para o encerramento de um cluster
Um padrão comum para clientes que executam vários clusters do EMR é sondar o Amazon EMR em busca de clusters encerrados para que o trabalho não seja mais enviado a eles. Você pode implementar esse padrão com as chamadas de API DescribeCluster e ListClusters ou ao usar o evento de alteração de estado do cluster do Amazon EMR.
Após o encerramento do cluster, o evento emitido é semelhante ao exemplo apresentado a seguir.
{ "version": "0", "id": "1234abb0-f87e-1234-b7b6-000000123456", "detail-type": "EMR Cluster State Change", "source": "aws.emr", "account": "123456789012", "time": "2016-12-16T21:00:23Z", "region": "us-east-1", "resources": [], "detail": { "severity": "INFO", "stateChangeReason": "{\"code\":\"USER_REQUEST\",\"message\":\"Terminated by user request\"}", "name": "Development Cluster", "clusterId": "j-123456789ABCD", "state": "TERMINATED", "message": "Amazon EMR Cluster jj-123456789ABCD (Development Cluster) has terminated at 2016-12-16 21:00 UTC with a reason of USER_REQUEST." } }
A seção “Detalhes” da carga útil inclui o clusterId e o estado que podem ser utilizados.