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:
-
Steuern Sie die Clusterbeendigung im Amazon EMR-Benutzerhandbuch.
-
Der Ausführen einer Aufgabe (.sync) Abschnitt Muster der Serviceintegration.
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 |
ausführen JobFlow | createClusterverwendet dieselbe Anforderungssyntax wie run JobFlow, mit Ausnahme der folgenden:
Amazon EMR verwendet Folgendes:
|
| 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: Amazon EMR verwendet dies:
|
| terminateCluster Beendet einen Cluster (Auftragsverlauf). |
beenden JobFlows | Anforderung verwendet Folgendes: Amazon EMR verwendet dies: |
| 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 |
Die Anfrage verwendet den Schlüssel"ClusterId". Amazon EMR verwendet"JobFlowId". Anforderung verwendet einen einzelnen Schritt. Amazon EMR verwendet Folgendes: Die Antwort lautet: Amazon EMR gibt Folgendes zurück:
|
|
| hinzufügen Step.sync Fügt einem ausgeführten Cluster einen neuen Schritt hinzu. Optional können Sie den |
Wie addStep, wartet aber auf den Abschluss des Schrittes. |
|
| cancelStep Bricht einen ausstehenden Schritt in einem laufenden Cluster ab. |
cancelSteps | Anforderung verwendet Folgendes: Amazon EMR verwendet dies: Die Antwort lautet: Amazon EMR verwendet Folgendes:
|
| modifizieren InstanceFleetByName Ändert die Ziel On-Demand - und Ziel-Spot-Kapazitäten für die Instance-Flotte mit den angegebenen |
modifizieren InstanceFleet | Die Anforderung entspricht der für modifyInstanceFleet, mit Ausnahme von Folgendem:
|
| ändern InstanceGroupByName Ändert die Anzahl der Knoten und Konfigurationseinstellungen einer Instance-Gruppe. |
ändern InstanceGroups | Anforderung lautet: Amazon EMR verwendet eine Liste:
Innerhalb des Objekts Das neue Feld |
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/*" } ] }