Cuándo configurar los eventos de EMR en CloudWatch
En algunas API de sondeo, como DescribeCluster, DescribeStep y ListClusters, configurar un evento de CloudWatch puede reducir el tiempo de respuesta a los cambios y liberar las Service Quotas. Por ejemplo, si tiene una función de Lambda configurada para ejecutarse cuando el estado de un clúster cambie, por ejemplo, cuando se complete un paso o se termine un clúster, puede usar ese activador para iniciar la siguiente acción del flujo de trabajo en lugar de esperar al siguiente sondeo. De lo contrario, si tiene instancias dedicadas de Amazon EC2 o funciones de Lambda que consultan constantemente la API de EMR para detectar cambios, no solo desperdiciará recursos de computación, sino que también podría alcanzar sus Service Quotas.
Los siguientes son algunos casos en los que podría beneficiarse de la transición a una arquitectura basada en eventos.
Caso 1: Sondeo de EMR mediante llamadas a la API DescribeCluster para completar pasos
ejemplo Sondeo de EMR mediante llamadas a la API DescribeCluster para completar pasos
Un patrón común consiste en enviar un paso a un clúster en ejecución y sondear Amazon EMR para conocer el estado del paso, normalmente mediante las API DescribeCluster o DescribeStep. Esta tarea también se puede realizar con un retraso mínimo conectándose al evento Step Status Change de Amazon EMR.
Este evento contiene la siguiente información en su 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." } }
En el mapa de detalles, una función de Lambda podría analizar “state”, “stepId” o “clusterId” para encontrar la información pertinente.
Caso 2: Sondeo de EMR en busca de clústeres disponibles para ejecutar flujos de trabajo
ejemplo Sondeo de EMR en busca de clústeres disponibles para ejecutar flujos de trabajo
Un patrón de los clientes que ejecutan varios clústeres es ejecutar los flujos de trabajo en los clústeres tan pronto como estén disponibles. Si hay muchos clústeres en ejecución y es necesario realizar un flujo de trabajo en un clúster que está en espera, un patrón podría consistir en sondear EMR mediante llamadas a la API DescribeCluster o ListClusters para ver los clústeres disponibles. Otra forma de reducir el retraso a la hora de saber cuándo un clúster está listo para un paso sería procesar el evento State Change de Amazon EMR.
Este evento contiene la siguiente información en su 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 caso, se podría configurar una función de Lambda para enviar inmediatamente un flujo de trabajo en espera a un clúster en cuanto su estado cambie a EN ESPERA.
Caso 3: Sondeo de EMR para la terminación del clúster
ejemplo Sondeo de EMR para la terminación del clúster
Un patrón común de clientes que ejecutan muchos clústeres de EMR consiste en sondear Amazon EMR en busca de los clústeres terminados para que ya no se les envíe trabajo. Puede implementar este patrón con las llamadas a las API DescribeCluster y ListClusters o mediante el evento Cluster State Change de Amazon EMR.
Tras la terminación del clúster, el evento emitido se parece al siguiente ejemplo.
{ "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." } }
La sección “detalles” de la carga incluye el id. de clúster y el estado sobre los que se puede actuar.