Rufen Sie Amazon EMR mit Step Functions auf - 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.

Rufen Sie Amazon EMR mit Step Functions auf

Step Functions kann bestimmte AWS Dienste direkt von Amazon States Language (ASL) aus steuern. Weitere Informationen hierzu finden Sie unter Arbeiten mit anderen -Services und Parameter an eine Service-API übergeben.

Wie sich die optimierte Amazon EMR-Integration von der Amazon EMR AWS SDK-Integration unterscheidet

Die optimierte Amazon EMR-Serviceintegration verfügt über einen benutzerdefinierten Satz von APIs, die die zugrunde liegenden Amazon EMR-APIs umfassen, die unten beschrieben werden. Aus diesem Grund unterscheidet es sich erheblich von der Amazon EMR AWS SDK-Serviceintegration. Darüber hinaus wird das Ausführen einer Aufgabe (.sync) Integrationsmuster unterstützt.

Für die Integration AWS Step Functions mit Amazon EMR verwenden Sie die bereitgestellten Amazon EMR-Serviceintegrations-APIs. Die Service-Integrations-APIs ähneln den entsprechenden Amazon EMR-APIs, mit einigen Unterschieden in den Feldern, die übergeben werden, und in den Antworten, die zurückgegeben werden.

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, läuft Ihr Cluster möglicherweise auf unbestimmte Zeit weiter und es können zusätzliche Gebühren anfallen. Um dies zu vermeiden, stellen Sie sicher, dass jeder Amazon EMR-Cluster, den Sie erstellen, ordnungsgemäß beendet wird. Weitere Informationen finden Sie hier:

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 einzureichen.

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

Anmerkung

Für die Integration mit Amazon EMR verfügt Step Functions über eine fest codierte Jobabfragefrequenz von 60 Sekunden für die ersten 10 Minuten und danach 300 Sekunden.

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

Amazon EMR Service Integration APIs und entsprechende Amazon EMR APIs
API für die Amazon EMR-Serviceintegration 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 zu Ihrer IAM-Berechtigungsrichtlinie hinzufügen können, finden Sie unter Verwenden der serviceverknüpften Rolle für Amazon EMR.

runJobFlow createClusterverwendet dieselbe Anfragesyntax wie runJobFlow, 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).

runJobFlow Entspricht createCluster, wartet aber darauf, dass der Cluster den Zustand WAITING erreicht.
setClusterTerminationSchutz

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.

setTerminationProtection Anforderung verwendet Folgendes:
{ "ClusterId": "string" }
Amazon EMR verwendet Folgendes:
{ "JobFlowIds": ["string"] }
terminateCluster

Beendet einen Cluster (Auftragsverlauf).

terminateJobFlows Anforderung verwendet Folgendes:
{ "ClusterId": "string" }
Amazon EMR verwendet Folgendes:
{ "JobFlowIds": ["string"] }
terminateCluster.sync

Beendet einen Cluster (Auftragsverlauf).

terminateJobFlows 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.

addJobFlowSchritte

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>] }
addStep.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.

addJobFlowSchritte

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 Folgendes:
{ "StepIds": [<strings>] }
Die Antwort lautet:
{ "CancelStepsInfo": <CancelStepsInfo object> }
Amazon EMR verwendet Folgendes:
{ "CancelStepsInfoList": [<CancelStepsInfo objects>] }
modifyInstanceFleetByName

Ändert die Ziel-On-Demand- und Ziel-Spot-Kapazitäten für die Instance-Flotte mit dem angegebenen InstanceFleetName.

modifyInstanceFleet 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.

modifyInstanceGroupByName

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

modifyInstanceGroups 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.

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

"Create_Cluster": { "Type": "Task", "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync", "Parameters": { "Name": "MyWorkflowCluster", "VisibleToAllUsers": true, "ReleaseLabel": "emr-5.28.0", "Applications": [ { "Name": "Hive" } ], "ServiceRole": "EMR_DefaultRole", "JobFlowRole": "EMR_EC2_DefaultRole", "LogUri": "s3n://aws-logs-123456789012-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", "Parameters": { "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", "Parameters": { "ClusterId.$": "$.ClusterId", "ExecutionRoleArn": "arn:aws:iam::123456789012:role/myEMR-execution-role", "Step": { "Name": "The first step", "ActionOnFailure": "CONTINUE", "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://<mybucket>/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", "Parameters": { "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", "Parameters": { "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", "Parameters": { "ClusterId": "j-1234567890123", "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", "Parameters": { "ClusterId": "j-1234567890123", "InstanceFleetName": "MyCoreFleet", "InstanceFleet": { "TargetOnDemandCapacity": 8, "TargetSpotCapacity": 0 } }, "End": true }

Informationen zur Konfiguration von IAM Berechtigungen bei der Verwendung Step Functions mit anderen AWS Diensten finden Sie unterIAM-Richtlinien für integrierte Dienste.