

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.

# Einen Spark-Schritt hinzufügen
<a name="emr-spark-submit-step"></a>

Sie können mit Amazon-EMR-Schritten Arbeit an das auf einem EMR-Cluster installierte Spark-Framework senden. Weitere Informationen finden Sie unter [Schritte](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-data-processing) im Verwaltungshandbuch für Amazon EMR. In der Konsole und CLI erfolgt dies mithilfe eines Spark-Anwendungsschritts, der das Skript `spark-submit` als Schritt in Ihrem Namen ausführt. In der API rufen Sie `spark-submit` mithilfe eines Schritts auf und verwenden `command-runner.jar`.

Weitere Informationen zum Senden von Anwendungen an Spark finden Sie im Thema [Bewerbungen einreichen](https://spark.apache.org/docs/latest/submitting-applications.html) in der Apache-Spark-Dokumentation.

**So senden Sie einen Spark-Schritt mithilfe der Konsole**

1. Öffnen Sie die Amazon EMR-Konsole unter [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/).

1. Wählen Sie unter **Cluster List** den Namen Ihres Clusters aus.

1. Scrollen Sie zum Abschnitt **Steps (Schritte)** und erweitern Sie ihn. Wählen Sie anschließend **Add step (Schritt hinzufügen)** aus.

1. Gehen Sie im Dialogfeld **Add Step** folgendermaßen vor:
   + Wählen Sie für **Step type** die Option **Spark application** aus.
   + Übernehmen Sie unter **Name** den Standardnamen ("Spark application") oder geben Sie einen neuen Namen ein.
   + Wählen Sie unter **Deploy mode (Bereitstellungsmodus)** den Modus **Client** oder **Cluster** aus. Der Client-Modus startet das Treiberprogramm in der Primär-Instance des Clusters, während der Cluster-Modus das Treiberprogramm im Cluster startet. Im Clientmodus wird die Protokollausgabe des Treibers in den Schrittprotokollen angezeigt, während im Clustermodus die Protokollausgabe des Treibers in den Protokollen für den ersten YARN-Container angezeigt wird. Weitere Informationen finden Sie unter [Übersicht über den Clustermodus](https://spark.apache.org/docs/latest/cluster-overview.html) in der Apache-Spark-Dokumentation.
   + Geben Sie die gewünschten **spark-submit**-Optionen an. Weitere Informationen zu den `spark-submit`-Optionen finden Sie unter [Starten von Anwendungen mit Spark-Submit](https://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit).
   + Geben Sie bei **Application location (Anwendungsspeicherort)** den lokalen oder S3-URI-Pfad der Anwendung an.
   + Lassen Sie unter **Arguments (Parameter)** das Feld leer.
   + Übernehmen Sie unter **Action on failure (Aktion bei Fehler)** die Standardeinstellung **Continue (Fortfahren)**.

1. Wählen Sie **Hinzufügen** aus. Der Schritt wird in der Konsole mit dem Status "Pending" angezeigt. 

1. Bei Ausführung des Schritts ändert sich dessen Status von **Pending** zu **Running** und **Completed**. Wählen Sie über der Spalte **Actions (Aktionen)** das Symbol **Refresh (Ansicht aktualisieren)** aus, um den Status zu aktualisieren. 

1. Die Ergebnisse des Schritts stehen in der Amazon-EMR-Konsole auf der Seite Cluster Details neben dem Schritt unter **Protokolldateien** zur Verfügung, wenn Sie die Protokollierung konfiguriert haben. Optional finden Sie Informationen zum Schritt im Protokoll-Bucket, den Sie beim Start des Clusters konfiguriert haben. 

**Um Arbeiten bei Spark einzureichen, verwenden Sie den AWS CLI**

Senden Sie einen Schritt, wenn Sie den Cluster erstellen, oder verwenden Sie den Unterbefehl `aws emr add-steps` in einem vorhandenen Cluster. 

1. Verwenden Sie `create-cluster`, wie im folgenden Beispiel gezeigt.
**Anmerkung**  
Linux-Zeilenfortsetzungszeichen (\$1) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

   ```
   aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-7.12.0 --applications Name=Spark \
   --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
   --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10] --use-default-roles
   ```

   Alternativ können Sie auch `command-runner.jar` verwenden, wie im folgenden Beispiel gezeigt.

   ```
   aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-7.12.0 \
   --applications Name=Spark --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
   --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[spark-example,SparkPi,10] --use-default-roles
   ```
**Anmerkung**  
Linux-Zeilenfortsetzungszeichen (\$1) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

1. Alternativ können Sie einem bereits ausgeführten Cluster Schritte hinzufügen. Verwenden Sie `add-steps`.

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10]
   ```

   Alternativ können Sie auch `command-runner.jar` verwenden, wie im folgenden Beispiel gezeigt.

   ```
   aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[spark-example,SparkPi,10]
   ```

**So senden Sie Arbeit mithilfe des SDK für Java an Spark**

1. Das folgende Beispiel zeigt, wie Sie einen Schritt zu einem Cluster mit Spark mittels Java hinzufügt.

   ```
   AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
   AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials);
    
   StepFactory stepFactory = new StepFactory();
   AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials);
   AddJobFlowStepsRequest req = new AddJobFlowStepsRequest();
   req.withJobFlowId("j-1K48XXXXXXHCB");
   
   List<StepConfig> stepConfigs = new ArrayList<StepConfig>();
   		
   HadoopJarStepConfig sparkStepConf = new HadoopJarStepConfig()
   			.withJar("command-runner.jar")
   			.withArgs("spark-submit","--executor-memory","1g","--class","org.apache.spark.examples.SparkPi","/usr/lib/spark/examples/jars/spark-examples.jar","10");			
   		
   StepConfig sparkStep = new StepConfig()
   			.withName("Spark Step")
   			.withActionOnFailure("CONTINUE")
   			.withHadoopJarStep(sparkStepConf);
   
   stepConfigs.add(sparkStep);
   req.withSteps(stepConfigs);
   AddJobFlowStepsResult result = emr.addJobFlowSteps(req);
   ```

1. Untersuchen Sie die Protokolle für den Schritt, um die Ergebnisse einzusehen. Sie können dies in der tun, AWS-Managementkonsole sofern Sie die Protokollierung aktiviert haben, indem Sie **Schritte** wählen, Ihren Schritt auswählen und dann für **Protokolldateien** entweder `stdout` oder wählen`stderr`. Wählen Sie **View Logs** aus, um eine Ansicht der verfügbaren Protokoll zu erhalten.

## Überschreiben der standardmäßigen Spark-Konfigurationseinstellungen
<a name="dynamic-configuration"></a>

Vielleicht möchten Sie die standardmäßigen Spark-Konfigurationswerte je nach Anwendung überschreiben. Sie können dies tun, wenn Sie Anwendungen mithilfe eines Schritts senden, wodurch im Wesentlichen Optionen an `spark-submit` übergeben werden. Sie möchten z. B. den Speicher ändern, der einem Executor-Prozess zugeordnet wurde. Dazu modifizieren Sie `spark.executor.memory`. Dann geben Sie den Schalter `--executor-memory` mit einem Argument wie dem folgenden an:

```
spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10
```

Auf ähnliche Weise können Sie `--executor-cores` und `--driver-memory` optimieren. In einem Schritt würden Sie die folgenden Argumente bereitstellen:

```
--executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10
```

Sie können mithilfe der Option `--conf` auch Einstellungen optimieren, die eventuell über keinen integrierten Schalter verfügen. Weitere Informationen zu anderen optimierbaren Einstellungen finden Sie im Thema [Dynamisches Laden von Spark-Eigenschaften](https://spark.apache.org/docs/latest/configuration.html#dynamically-loading-spark-properties) in der Apache-Spark-Dokumentation.