Spark-Anwendungsspezifikationen mit früheren AMI Versionen von Amazon EMR - Amazon EMR

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.

Spark-Anwendungsspezifikationen mit früheren AMI Versionen von Amazon EMR

Spark im interaktiven Modus oder im Batch-Modus verwenden

Amazon EMR ermöglicht es Ihnen, Spark-Anwendungen in zwei Modi auszuführen:

  • Interactive

  • Stapel

Wenn Sie einen Cluster mit langer Laufzeit über die Konsole oder die starten AWS CLI, können Sie SSH sich als Hadoop-Benutzer mit dem Master-Knoten verbinden und die Spark-Shell verwenden, um Ihre Spark-Anwendungen interaktiv zu entwickeln und auszuführen. Mit der interaktiven Verwendung von Spark ist das Entwickeln von Prototypen für Spark-Anwendungen und das Testen dieser Anwendungen einfacher als in einer Batch-Umgebung. Nachdem Sie die Spark-Anwendung erfolgreich im interaktiven Modus überarbeitet haben, können Sie diese Anwendung JAR oder das Python-Programm in das lokale Dateisystem des Master-Knotens des Clusters auf Amazon S3 einfügen. Anschließend können Sie die Anwendung als Batch-Workflow senden.

Laden Sie im Batch-Modus das Spark-Skript in Amazon S3 oder ins Dateisystem des lokalen Hauptknotens hoch und senden Sie dann die Arbeit als Schritt an den Cluster. Spark-Schritte können an lang- oder kurzlebige Cluster gesendet werden.

Erstellen eines Clusters mit installiertem Spark

So starten Sie einen Cluster mit installiertem Spark über die Console
  1. Navigieren Sie zur neuen EMR Amazon-Konsole und wählen Sie in der Seitennavigation die Option Zur alten Konsole wechseln aus. Weitere Informationen darüber, was Sie erwartet, wenn Sie zur alten Konsole wechseln, finden Sie unter Verwenden der alten Konsole.

  2. Wählen Sie Cluster erstellen.

  3. Wählen Sie unter Softwarekonfiguration die AMI Release-Version aus, die Sie benötigen.

  4. Wählen Sie unter Applications to be installed (Zu installierende Anwendungen) in der Liste Spark und anschließend Configure and add (Konfigurieren und hinzufügen) aus.

  5. Sie können Argumente hinzufügen, um die Spark-Konfiguration bei Bedarf zu ändern. Weitere Informationen finden Sie unter Konfigurieren von Spark. Wählen Sie Hinzufügen aus.

  6. Wählen Sie nach Bedarf weitere Optionen und anschließend Create cluster (Cluster erstellen) aus.

Das folgende Beispiel zeigt, wie Sie einen Cluster mit Spark mittels Java erstellen:

AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); SupportedProductConfig sparkConfig = new SupportedProductConfig() .withName("Spark"); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Spark Cluster") .withAmiVersion("3.11.0") .withNewSupportedProducts(sparkConfig) .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyName") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request);

Konfigurieren von Spark

Sie konfigurieren Spark, wenn Sie einen Cluster erstellen, indem Sie die Bootstrap-Aktion ausführen, die sich im awslabs/emr-bootstrap-actions/sparkRepository auf Github befindet. Argumente, die von der Bootstrap-Aktion akzeptiert werden, finden Sie READMEin diesem Repository. Die Bootstrap-Aktion konfiguriert Eigenschaften in der Datei $SPARK_CONF_DIR/spark-defaults.conf. Weitere Informationen zu den Einstellungen finden Sie im Thema zur Spark-Konfiguration in der Spark-Dokumentation. Sie können „latest“ im Folgenden URL durch die Versionsnummer von Spark ersetzen, den Sie installieren, zum Beispiel. 2.2.0 http://spark.apache.org/docs/latest/configuration.html

Ebenso ist es möglich, Spark dynamisch bei jeder Anwendungsübermittlung zu konfigurieren. Eine Einstellung, mit der die Ressourcenzuordnung für einen Executor automatisch erhöht wird, ist über die Konfigurationsdatei spark verfügbar. Weitere Informationen finden Sie unter Überschreiben der standardmäßigen Spark-Konfigurationseinstellungen.

Ändern von Spark-Standardeinstellungen

Das folgende Beispiel zeigt, wie Sie einen Cluster mit der AWS CLI erstellen, bei dem spark.executor.memory auf 2G gesetzt ist.

Anmerkung

Linux-Zeilenfortsetzungszeichen (\) 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 "Spark cluster" --ami-version 3.11.0 \ --applications Name=Spark, Args=[-d,spark.executor.memory=2G] --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 --use-default-roles

Aufträge an Spark übergeben

Um Arbeit an einen Cluster zu senden, führen Sie einen Schritt aus, um das spark-submit Skript auf Ihrem EMR Cluster auszuführen. Fügen Sie den Schritt mithilfe der addJobFlowSteps folgenden Methode hinzu AmazonElasticMapReduceClient:

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); StepFactory stepFactory = new StepFactory(); AddJobFlowStepsRequest req = new AddJobFlowStepsRequest(); req.withJobFlowId("j-1K48XXXXXXHCB"); List<StepConfig> stepConfigs = new ArrayList<StepConfig>(); StepConfig sparkStep = new StepConfig() .withName("Spark Step") .withActionOnFailure("CONTINUE") .withHadoopJarStep(stepFactory.newScriptRunnerStep("/home/hadoop/spark/bin/spark-submit","--class","org.apache.spark.examples.SparkPi","/home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar","10")); stepConfigs.add(sparkStep); req.withSteps(stepConfigs); AddJobFlowStepsResult result = emr.addJobFlowSteps(req);

Überschreiben der standardmäßigen Spark-Konfigurationseinstellungen

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. Sie können den Schalter --executor-memory mit einem Argument wie dem folgenden angeben:

/home/hadoop/spark/bin/spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/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 /home/hadoop/spark/lib/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 in der Apache-Spark-Dokumentation.