View a markdown version of this page

Erstellen und verwalten Sie Amazon EMR-Cluster mit Step Functions - 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.

Erstellen und verwalten Sie Amazon EMR-Cluster mit Step Functions

Erfahren Sie, wie Sie mithilfe der bereitgestellten Amazon EMR-Serviceintegrations-APIs eine Integration AWS Step Functions mit Amazon EMR durchführen. Die APIs für die Serviceintegration ähneln den entsprechenden Amazon EMR-APIs, mit einigen Unterschieden in den übergebenen Feldern und in den zurückgegebenen Antworten.

Weitere Informationen zur Integration mit AWS Services in Step Functions finden Sie unter Integrieren von -Services undÜbergeben von Parametern an eine Service-API in Step Functions.

Hauptmerkmale der optimierten Amazon EMR-Integration
  • Die optimierte Amazon EMR-Serviceintegration verfügt über einen maßgeschneiderten Satz von APIs, die die unten beschriebenen zugrunde liegenden Amazon EMR-APIs umfassen. Aus diesem Grund unterscheidet sie sich erheblich von der Amazon EMR AWS SDK-Serviceintegration.

  • Das Ausführen einer Aufgabe (.sync) Integrationsmuster wird unterstützt.

Step Functions beendet einen Amazon EMR-Cluster nicht automatisch, wenn die Ausführung gestoppt wird. Wenn Ihr State Machine stoppt, bevor Ihr Amazon EMR-Cluster beendet wurde, kann Ihr Cluster auf unbestimmte Zeit weiterlaufen, und es können zusätzliche Kosten anfallen. Um dies zu vermeiden, stellen Sie sicher, dass alle Amazon EMR-Cluster, die Sie erstellen, ordnungsgemäß beendet werden. Weitere Informationen finden Sie unter:

Anmerkung

Ab sofort emr-5.28.0 können Sie den Parameter StepConcurrencyLevel beim Erstellen eines Clusters angeben, damit mehrere Schritte parallel auf einem einzelnen Cluster ausgeführt werden können. Sie können die Step-Funktionen Map und Parallel -Status verwenden, um Arbeiten parallel an den Cluster zu senden.

Die Verfügbarkeit der Amazon EMR-Serviceintegration hängt von der Verfügbarkeit der Amazon EMR-APIs ab. In der Amazon EMR-Dokumentation finden Sie Informationen zu Einschränkungen in bestimmten Regionen.

Anmerkung

Für die Integration mit Amazon EMR verfügt Step Functions für die ersten 10 Minuten über eine fest kodierte Häufigkeit der Jobabfragen von 60 Sekunden und danach 300 Sekunden.

Optimierte Amazon EMR-APIs

In der folgenden Tabelle werden die Unterschiede zwischen den einzelnen Amazon EMR-Serviceintegrations-APIs und den entsprechenden Amazon EMR-APIs beschrieben.

Amazon EMR Service-Integrations-API Entsprechende EMR-API Unterschiede
createCluster

Erstellt und startet einen Cluster (Auftragsverlauf).

Amazon EMR ist direkt mit einer speziellen Art von IAM-Rolle verknüpft, die als serviceverknüpfte Rolle bezeichnet wird. Damit createCluster und createCluster.sync funktionieren, müssen Sie die erforderlichen Berechtigungen zum Erstellen der serviceverknüpften Rolle AWSServiceRoleForEMRCleanup konfiguriert haben. Weitere Informationen dazu, einschließlich einer Erklärung, die Sie Ihrer IAM-Berechtigungsrichtlinie hinzufügen können, finden Sie unter Using the Service-Linked Role for Amazon EMR.

ausführen JobFlow createClusterverwendet dieselbe Anforderungssyntax wie run JobFlow, mit Ausnahme der folgenden:
  • Das Feld Instances.KeepJobFlowAliveWhenNoSteps ist obligatorisch und muss den booleschen Wert TRUE aufweisen.

  • Das Feld Steps ist nicht zulässig.

  • Das Feld Instances.InstanceFleets[index].Name sollte angegeben werden und muss eindeutig sein, wenn die optionale Connector-API modifyInstanceFleetByName verwendet wird.

  • Das Feld Instances.InstanceGroups[index].Name sollte angegeben werden und muss eindeutig sein, wenn die optionale modifyInstanceGroupByName-API verwendet wird.

Die Antwort lautet:
{ "ClusterId": "string" }
Amazon EMR verwendet Folgendes:
{ "JobFlowId": "string" }
createCluster.sync

Erstellt und startet einen Cluster (Auftragsverlauf).

ausführen JobFlow Entspricht createCluster, wartet aber darauf, dass der Cluster den Zustand WAITING erreicht.
einstellen ClusterTerminationProtection

Sperrt einen Cluster (Auftragsverlauf), sodass die EC2-Instances im Cluster nicht durch Benutzereingriffe, einen API-Aufruf oder durch einen Fehler im Auftragsverlauf beendet werden können.

einstellen TerminationProtection Anforderung verwendet Folgendes:
{ "ClusterId": "string" }
Amazon EMR verwendet dies:
{ "JobFlowIds": ["string"] }
terminateCluster

Beendet einen Cluster (Auftragsverlauf).

beenden JobFlows Anforderung verwendet Folgendes:
{ "ClusterId": "string" }
Amazon EMR verwendet dies:
{ "JobFlowIds": ["string"] }
beenden Cluster.sync

Beendet einen Cluster (Auftragsverlauf).

beenden JobFlows Entspricht terminateCluster, wartet aber auf den Abschluss des Clusters.
addStep

Fügt einem ausgeführten Cluster einen neuen Schritt hinzu.

Optional können Sie den ExecutionRoleArn Parameter auch angeben, während Sie diese API verwenden.

hinzufügen JobFlowSteps

Die Anfrage verwendet den Schlüssel"ClusterId". Amazon EMR verwendet"JobFlowId". Anforderung verwendet einen einzelnen Schritt.
{ "Step": <"StepConfig object"> }
Amazon EMR verwendet Folgendes:
{ "Steps": [<StepConfig objects>] }
Die Antwort lautet:
{ "StepId": "string" }
Amazon EMR gibt Folgendes zurück:
{ "StepIds": [<strings>] }
hinzufügen Step.sync

Fügt einem ausgeführten Cluster einen neuen Schritt hinzu.

Optional können Sie den ExecutionRoleArn Parameter auch angeben, während Sie diese API verwenden.

hinzufügen JobFlowSteps

Wie addStep, wartet aber auf den Abschluss des Schrittes.
cancelStep

Bricht einen ausstehenden Schritt in einem laufenden Cluster ab.

cancelSteps Anforderung verwendet Folgendes:
{ "StepId": "string" }
Amazon EMR verwendet dies:
{ "StepIds": [<strings>] }
Die Antwort lautet:
{ "CancelStepsInfo": <CancelStepsInfo object> }
Amazon EMR verwendet Folgendes:
{ "CancelStepsInfoList": [<CancelStepsInfo objects>] }
modifizieren InstanceFleetByName

Ändert die Ziel On-Demand - und Ziel-Spot-Kapazitäten für die Instance-Flotte mit den angegebenenInstanceFleetName.

modifizieren InstanceFleet Die Anforderung entspricht der für modifyInstanceFleet, mit Ausnahme von Folgendem:
  • Das Feld Instance.InstanceFleetId ist nicht zulässig.

  • Zur Laufzeit wird die InstanceFleetId automatisch anhand der Serviceintegration bestimmt, indem ListInstanceFleets aufgerufen und das Ergebnis analysiert wird.

ändern InstanceGroupByName

Ändert die Anzahl der Knoten und Konfigurationseinstellungen einer Instance-Gruppe.

ändern InstanceGroups Anforderung lautet:
{ "ClusterId": "string", "InstanceGroup": <InstanceGroupModifyConfig object> }
Amazon EMR verwendet eine Liste:
{ "ClusterId": ["string"], "InstanceGroups": [<InstanceGroupModifyConfig objects>] }

Innerhalb des Objekts InstanceGroupModifyConfig ist das Feld InstanceGroupId nicht zulässig.

Das neue Feld InstanceGroupName wurde hinzugefügt. Zur Laufzeit wird die InstanceGroupId automatisch anhand der Serviceintegration bestimmt, indem ListInstanceGroups aufgerufen und das Ergebnis analysiert wird.

Beispiel für einen Arbeitsablauf

Im Folgenden finden Sie einen Task-Zustand, der einen Cluster erstellt.

"Create_Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync", "Arguments": { "Name": "MyWorkflowCluster", "VisibleToAllUsers": true, "ReleaseLabel": "emr-5.28.0", "Applications": [ { "Name": "Hive" } ], "ServiceRole": "EMR_DefaultRole", "JobFlowRole": "EMR_EC2_DefaultRole", "LogUri": "s3n://aws-logs-account-id-us-east-1/elasticmapreduce/", "Instances": { "KeepJobFlowAliveWhenNoSteps": true, "InstanceFleets": [ { "InstanceFleetType": "MASTER", "Name": "MASTER", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m4.xlarge" } ] }, { "InstanceFleetType": "CORE", "Name": "CORE", "TargetOnDemandCapacity": 1, "InstanceTypeConfigs": [ { "InstanceType": "m4.xlarge" } ] } ] } }, "End": true }

Im Folgenden finden Sie einen Task-Zustand, der den Kündigungsschutz ermöglicht.

"Enable_Termination_Protection": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:setClusterTerminationProtection", "Arguments": { "ClusterId": "{% $ClusterId %}", "TerminationProtected": true }, "End": true }

Im Folgenden finden Sie einen Task-Zustand, der einen Schritt an einen Cluster sendet.

"Step_One": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:addStep.sync", "Arguments": { "ClusterId": "{% $ClusterId %}", "ExecutionRoleArn": "arn:aws:iam::account-id:role/myEMR-execution-role", "Step": { "Name": "The first step", "ActionOnFailure": "TERMINATE_CLUSTER", "HadoopJarStep": { "Jar": "command-runner.jar", "Args": [ "hive-script", "--run-hive-script", "--args", "-f", "s3://region.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q", "-d", "INPUT=s3://region.elasticmapreduce.samples", "-d", "OUTPUT=s3://<amzn-s3-demo-bucket>/MyHiveQueryResults/" ] } } }, "End": true }

Im Folgenden finden Sie einen Task-Zustand, der einen Schritt abbricht.

"Cancel_Step_One": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:cancelStep", "Arguments": { "ClusterId": "{% $ClusterId %}", "StepId": "{% $AddStepsResult.StepId %}" }, "End": true }

Im Folgenden finden Sie einen Task-Zustand, der einen Cluster beendet.

"Terminate_Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:terminateCluster.sync", "Arguments": { "ClusterId": "{% $ClusterId %}", }, "End": true }

Im Folgenden finden Sie einen Task-Zustand, der einen Cluster für eine Instance-Gruppe nach oben oder unten skaliert.

"ModifyInstanceGroupByName": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceGroupByName", "Arguments": { "ClusterId": "j-account-id3", "InstanceGroupName": "MyCoreGroup", "InstanceGroup": { "InstanceCount": 8 } }, "End": true }

Im Folgenden finden Sie einen Task-Zustand, der einen Cluster für eine Instance-Flotte nach oben oder unten skaliert.

"ModifyInstanceFleetByName": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:modifyInstanceFleetByName", "Arguments": { "ClusterId": "j-account-id3", "InstanceFleetName": "MyCoreFleet", "InstanceFleet": { "TargetOnDemandCapacity": 8, "TargetSpotCapacity": 0 } }, "End": true }

IAM-Richtlinien für das Aufrufen von Amazon EMR

Die folgenden Beispielvorlagen zeigen, wie IAM-Richtlinien auf der Grundlage der Ressourcen in Ihrer State-Machine-Definition AWS Step Functions generiert werden. Weitere Informationen erhalten Sie unter So generiert Step Functions IAM-Richtlinien für integrierte Dienste und Entdecken Sie Serviceintegrationsmuster in Step Functions.

addStep

Statische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/clusterId" ] } ] }

Dynamische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:DescribeStep", "elasticmapreduce:CancelSteps" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }

cancelStep

Statische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:CancelSteps", "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }

Dynamische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:CancelSteps", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }

createCluster

Statische Ressourcen

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

setzen ClusterTerminationProtection

Statische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }

Dynamische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "elasticmapreduce:SetTerminationProtection", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }

ändern InstanceFleetByName

Statische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }

Dynamische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceFleet", "elasticmapreduce:ListInstanceFleets" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }

modifizieren InstanceGroupByName

Statische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }

Dynamische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:ListInstanceGroups" ], "Resource": "*" } ] }

terminateCluster

Statische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": [ "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/myCluster-id" ] } ] }

Dynamische Ressourcen

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:DescribeCluster" ], "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*" } ] }