Administrar un trabajo de Amazon EMR - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Administrar un trabajo de Amazon EMR

Este proyecto de ejemplo demuestra Amazon EMR y AWS Step Functions su integración.

Enseña cómo crear un clúster de Amazon EMR, agregar varios pasos, ejecutarlos y después terminar el clúster.

importante

Amazon EMR no tiene una capa de precios gratuita. La ejecución del proyecto de muestra incurrirá en costos. Puede encontrar información acerca de los precios en la página Precios de Amazon EMR. La disponibilidad de la integración de servicios de Amazon EMR depende de la disponibilidad de las API de Amazon EMR. Por este motivo, es posible que este proyecto de ejemplo no funcione correctamente en algunas AWS regiones. Consulte la documentación de Amazon EMR para conocer las limitaciones en regiones especiales.

Paso 1: Crear la máquina de estado y aprovisionar recursos

  1. Abra la consola de Step Functions y seleccione Crear máquina de estado.

  2. Escriba Manage an EMR job en el cuadro de búsqueda y, a continuación, seleccione Administración de un trabajo de EMR en los resultados de búsqueda que aparecen.

  3. Elija Siguiente para continuar.

  4. Step Functions muestra una lista de las Servicios de AWS utilizadas en el proyecto de muestra que ha seleccionado. También muestra un gráfico del flujo de trabajo para el proyecto de muestra. Implemente este proyecto en su empresa Cuenta de AWS o utilícelo como punto de partida para crear sus propios proyectos. En función de cómo desee continuar, elija Ejecutar una demostración o Crear a partir de ella.

    En este proyecto de muestra se implementan los siguientes recursos:

    • Un bucket de Amazon S3

    • Un clúster Amazon EMR

    • ¿Una máquina de AWS Step Functions estados

    • Funciones relacionadas AWS Identity and Access Management (IAM)

    En la siguiente imagen se ilustra el gráfico del flujo de trabajo del proyecto de muestra Administración de un trabajo de EMR:

    
          Gráfico del flujo de trabajo del proyecto de muestra Administración de un trabajo de EMR.
  5. Elija Utilizar plantilla para continuar con la selección.

  6. Realice una de las acciones siguientes:

    • Si se ha seleccionado Crear a partir de ella, Step Functions crea el prototipo de flujo de trabajo para el proyecto de muestra que ha seleccionado. Step Functions no implementa los recursos que se enumeran en la definición del flujo de trabajo.

      En Modo Diseño de Workflow Studio, arrastre y suelte los estados desde el Navegador de estados para seguir creando su prototipo de flujo de trabajo. Del mismo modo, cambie al Modo Código que proporciona un editor de código integrado similar a VS Code para actualizar la definición (ASL) de Lenguaje de estados de Amazon de su máquina de estado en la consola de Step Functions. Para obtener más información acerca del uso de Workflow Studio para crear máquinas de estados, consulte Usar Workflow Studio.

      importante

      No olvide actualizar el marcador de posición del nombre de recurso de Amazon (ARN) para los recursos que se utilizan en el proyecto de muestra antes de ejecutar el flujo de trabajo.

    • Si seleccionó Ejecutar una demostración, Step Functions crea un proyecto de ejemplo de solo lectura que utiliza una AWS CloudFormation plantilla para implementar los AWS recursos que figuran en esa plantilla en su empresa. Cuenta de AWS

      sugerencia

      Seleccione Código para ver la definición de máquina de estados del proyecto de muestra.

      Cuando esté listo, elija Implementar y ejecutar para implementar el proyecto de muestra y crear los recursos.

      El proceso de creación de estos recursos y los permisos de IAM relacionados puede tardar hasta 10 minutos. Mientras se despliegan sus recursos, puede abrir el enlace CloudFormation Stack ID para ver qué recursos se están aprovisionando.

      Una vez que se creen todos los recursos del proyecto de muestra, podrá ver el nuevo proyecto de muestra en la página Máquinas de estado.

      importante

      Es posible que se apliquen cargos estándar por cada servicio utilizado en la CloudFormation plantilla.

Paso 2: Ejecutar la máquina de estado

  1. En la página Máquina de estado, elija su proyecto de muestra.

  2. En la página del proyecto de muestra, seleccione Iniciar ejecución.

  3. En el cuadro de diálogo Iniciar ejecución, haga lo siguiente:

    1. (Opcional) Para identificar la ejecución, puede especificar un nombre en el cuadro Nombre. De forma predeterminada, Step Functions genera automáticamente un nombre de ejecución único.

      nota

      Step Functions le permite crear nombres para máquinas de estados, ejecuciones y actividades, así como etiquetas que contienen caracteres no ASCII. Estos nombres que no son ASCII no funcionan con Amazon. CloudWatch Para asegurarse de que puede realizar un seguimiento de CloudWatch las métricas, elija un nombre que utilice únicamente caracteres ASCII.

    2. (Opcional) En el cuadro Entrada, introduzca los valores de entrada en formato JSON para ejecutar el flujo de trabajo.

      Si se ha seleccionado Ejecutar una demostración, no es necesario proporcionar ninguna entrada de ejecución.

      nota

      Si el proyecto de demostración que implementó contiene datos de entrada de ejecución rellenados previamente, utilice esa entrada para ejecutar la máquina de estado.

    3. Seleccione Iniciar ejecución.

    4. La consola de Step Functions le dirige a una página cuyo título es su ID de ejecución. Esta página se conoce como Detalles de la ejecución. En esta página, puede revisar los resultados de la ejecución a medida que avanza la ejecución o una vez finalizada.

      Para revisar los resultados de la ejecución, elija los estados individuales en la Vista de gráfico y, a continuación, elija las pestañas individuales del panel Detalles del paso para ver los detalles de cada estado, incluidas la entrada, la salida y la definición, respectivamente. Para obtener más información sobre la ejecución que puede ver en la página Detalles de la ejecución, consulte Página de detalles de ejecución: información general de la interfaz.

Código de la máquina de estado de ejemplo

La máquina de estado de este proyecto de muestra se integra con Amazon EMR pasando parámetros directamente a esos recursos. Examine esta máquina de estado de ejemplo para ver cómo Step Functions utiliza una máquina de estado para llamar a la tarea de Amazon EMR de forma síncrona, espera a que la tarea se realice correctamente o falle y entonces termina el clúster.

Para obtener más información sobre cómo AWS Step Functions controlar otros AWS servicios, consulteUso AWS Step Functions con otros servicios.

{ "Comment": "An example of the Amazon States Language for running jobs on Amazon EMR", "StartAt": "Create an EMR cluster", "States": { "Create an EMR cluster": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:createCluster.sync", "Parameters": { "Name": "ExampleCluster", "VisibleToAllUsers": true, "ReleaseLabel": "emr-5.26.0", "Applications": [ { "Name": "Hive" } ], "ServiceRole": "<EMR_SERVICE_ROLE>", "JobFlowRole": "<EMR_EC2_INSTANCE_PROFILE>", "LogUri": "s3://<EMR_LOG_S3_BUCKET>/logs/", "Instances": { "KeepJobFlowAliveWhenNoSteps": true, "InstanceFleets": [ { "Name": "MyMasterFleet", "InstanceFleetType": "MASTER", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge" } ] }, { "Name": "MyCoreFleet", "InstanceFleetType": "CORE", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge" } ] } ] } }, "ResultPath": "$.cluster", "Next": "Run first step" }, "Run first step": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.cluster.ClusterId", "Step": { "Name": "My first EMR step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": ["<COMMAND_ARGUMENTS>"] } } }, "Retry" : [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2.0 } ], "ResultPath": "$.firstStep", "Next": "Run second step" }, "Run second step": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:addStep.sync", "Parameters": { "ClusterId.$": "$.cluster.ClusterId", "Step": { "Name": "My second EMR step", "ActionOnFailure": "CONTINUE", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": ["<COMMAND_ARGUMENTS>"] } } }, "Retry" : [ { "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2.0 } ], "ResultPath": "$.secondStep", "Next": "Terminate Cluster" }, "Terminate Cluster": { "Type": "Task", "Resource": "arn:<PARTITION>:states:::elasticmapreduce:terminateCluster", "Parameters": { "ClusterId.$": "$.cluster.ClusterId" }, "End": true } } }

Ejemplo de IAM

Esta política de ejemplo AWS Identity and Access Management (IAM) generada por el proyecto de muestra incluye los privilegios mínimos necesarios para ejecutar la máquina de estados y los recursos relacionados. Es una práctica recomendada incluir solo los permisos necesarios en las políticas de IAM.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow", "elasticmapreduce:DescribeCluster", "elasticmapreduce:TerminateJobFlows" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::123456789012:role/StepFunctionsSample-EMRJobManagement-EMRServiceRole-ANPAJ2UCCR6DPCEXAMPLE", "arn:aws:iam::123456789012:role/StepFunctionsSample-EMRJobManagementWJALRXUTNFEMI-ANPAJ2UCCR6DPCEXAMPLE-EMREc2InstanceProfile-1ANPAJ2UCCR6DPCEXAMPLE" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:sa-east-1:123456789012:rule/StepFunctionsGetEventForEMRRunJobFlowRule" ] } ] }

La siguiente política garantiza que addStep tenga los permisos suficientes.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:sa-east-1:123456789012:rule/StepFunctionsGetEventForEMRAddJobFlowStepsRule" ] } ] } }

Para obtener información sobre cómo configurar IAM al utilizar Step Functions con otros AWS servicios, consultePolíticas de IAM para servicios integrados.