Verwalten eines Amazon EMR-Auftrags - AWS Step Functions

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwalten eines Amazon EMR-Auftrags

Dieses Beispielprojekt veranschaulicht Amazon EMR undAWS Step Functions-Integration.

Es zeigt, wie Sie einen Amazon-EMR-Cluster erstellen, mehrere Schritte hinzufügen und ausführen und den Cluster dann beenden.

Wichtig

Amazon EMR hat kein kostenloses Preiskontingent. Bei der Ausführung des Beispielprojekts fallen Kosten an. Preisinformationen finden Sie auf derPreisliste für Amazon EMRangezeigten. Die Verfügbarkeit der Amazon EMR-Service-Integration hängt von der Verfügbarkeit von Amazon EMR-APIs ab. Aus diesem Grund funktioniert dieses Beispielprojekt in einigen AWS-Regionen möglicherweise nicht korrekt. Sehen Sie dasAmazon EMR-Dokumentation für Einschränkungen in speziellen Regionen.

Erstellen des Zustandsautomaten und Bereitstellen von Ressourcen

  1. Öffnen SieStep Functions -Konsoleund wähleErstellen eines Zustandsautomatenaus.

  2. Wählen Sie Sample Projects (Beispielprojekte) und anschließend Manage an EMR Job (Verwalten eines EMR-Auftrags).

    Der Code und der Visual Workflow des Zustandsautomaten werden angezeigt.

    
          Benachrichtigungs-Workflow zu Container-Aufgaben.
  3. Wählen Sie Next (Weiter) aus.

    Die Seite Deploy resources (Ressourcen bereitstellen) wird angezeigt und listet die Ressourcen auf, die erstellt werden. Die Ressourcen für dieses Beispielprojekt enthalten einen Amazon S3 S3-Bucket.

  4. Wählen Sie Deploy Resources (Ressourcen bereitstellen) aus.

    Anmerkung

    Es kann bis zu 10 Minuten dauern, um diese Ressourcen und verwandteAWS Identity and Access Management(IAM) Berechtigungen, die erstellt werden sollen. Wenn die Seite Deploy resources (Ressourcen bereitstellen) anzeigt wird, können Sie den Link Stack ID (Stack-ID) öffnen, um zu sehen, welche Ressourcen bereitgestellt werden.

Starten einer neuen Ausführung

  1. Geben Sie auf der Seite New execution (Neue Ausführung) einen Namen für die Ausführung (optional) ein und wählen Sie Start Execution (Ausführung starten).

  2. (Optional) Um die Ausführung zu identifizieren, können Sie einen Namen für sie in derNameaus. Standardmäßig generiert Step Functions automatisch einen eindeutigen Ausführungsnamen.

    Anmerkung

    Mit Step Functions können Sie Statuscomputer-, Ausführungs- und Aktivitätsnamen erstellen, die Nicht-ASCII-Zeichen enthalten. Diese Nicht-ASCII-Namen funktionieren nicht mit AmazonCloudWatchaus. Um sicherzustellen, dass Sie verfolgen könnenCloudWatchMetriken, wählen Sie einen Namen, der nur ASCII-Zeichen verwendet.

  3. (Optional) Sie können auf den Step Functions zum neu erstellten Zustandsautomaten wechselnDashboardund danach aufNeue Ausführungaus.

  4. Wenn eine Ausführung abgeschlossen ist, können Sie Zustände auf derVisueller WorkflowStöbern Sie in derEingabeundAusgabeunterSchritt-Detailsaus.

Code des Zustandsautomaten aus diesem Beispiel

Der Zustandsautomat in diesem Beispielprojekt lässt sich in Amazon EMR integrieren, indem Parameter direkt an diese Ressourcen übergeben werden. Navigieren Sie durch diesen Beispielzustandsautomaten, um zu sehen, wie Step Functions einen Zustandsautomaten verwendet, um die Amazon EMR-Aufgabe synchron aufzurufen, auf den Erfolg oder Misserfolg der Aufgabe wartet und den Cluster beendet.

Weitere Informationen darüber, wie AWS Step Functions andere AWS-Services steuern kann, finden Sie unter Verwenden von AWS Step Functions mit sonstigen Services.

{ "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 } } }

IAM-Beispiel

Dieses BeispielAWS Identity and Access ManagementDie (IAM-Richtlinie), die vom Beispielprojekt erstellt wurde, enthält die geringstmöglichen Privilegien, die für die Ausführung des Zustandsautomaten und der verwandten Ressourcen erforderlich sind Es ist eine bewährte Methode, nur die erforderlichen Berechtigungen in die IAM-Richtlinien aufzunehmen.

{ "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" ] } ] }

Die folgende Richtlinie stellt sicher, dass addStep über ausreichende Berechtigungen verfügt.

{ "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" ] } ] } }

Weitere Informationen zum Konfigurieren von IAM bei Verwendung von Step Functions mit anderenAWSDienstleistungen, sieheIAM-Richtlinien für integrierte Diensteaus.