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.
Konfigurieren von Spark
Sie können Spark auf Amazon EMR
Zu den Konfigurationsklassifizierungen für Spark bei Amazon EMR gehören:
-
spark
– Setzt diemaximizeResourceAllocation
-Eigenschaft auf „wahr“ oder „falsch“. Wenn der Wert wahr ist, konfiguriert Amazon EMR automatischspark-defaults
Eigenschaften auf der Grundlage der Cluster-Hardwarekonfiguration. Weitere Informationen finden Sie unter Verwenden von maximizeResourceAllocation. -
spark-defaults
– Setzt Werte in derspark-defaults.conf
-Datei. Weitere Informationen finden Sie unter Spark-Konfigurationin der Spark-Dokumentation. -
spark-env
– Setzt Werte in derspark-env.sh
-Datei. Weiter Informationen finden Sie unter Umgebungsvariablenin der Spark-Dokumentation. -
spark-hive-site
– Legt Werte in derhive-site.xml
für Spark fest. -
spark-log4j
— (Amazon EMR veröffentlicht 6.7.x und niedriger) Legt Werte in derlog4j.properties
Datei fest. Weitere Informationen finden Sie in der log4j.properties.template-Datei auf Github. -
spark-log4j2
— (Amazon EMR veröffentlicht 6.8.0 und höher) Legt Werte in derlog4j2.properties
Datei fest. Weitere Informationen finden Sie in der log4j2.properties.template-Datei auf Github. -
spark-metrics
– Setzt Werte in dermetrics.properties
-Datei. Einstellungen und weitere Informationen finden Sie in der metrics.properties.template-Datei auf GitHub und unter Metrics in der Spark-Dokumentation.
Anmerkung
Wenn Sie Spark-Workloads EMR von einer anderen Plattform zu Amazon migrieren, empfehlen wir Ihnen, Ihre Workloads mit der zu testen, Von Amazon festgelegte Spark-Standardeinstellungen EMR bevor Sie benutzerdefinierte Konfigurationen hinzufügen. Die meisten Kunden sehen mit unseren Standardeinstellungen eine verbesserte Leistung.
Themen
- Von Amazon festgelegte Spark-Standardeinstellungen EMR
- Konfiguration der Spark-Garbage-Collection auf Amazon EMR 6.1.0
- Verwenden von maximizeResourceAllocation
- Verhalten der Außerbetriebnahme von Knoten konfigurieren
- ThriftServer Spark-Umgebungsvariable
- Ändern von Spark-Standardeinstellungen
- Migration von Apache Log4j 1.x zu Log4j 2.x
Von Amazon festgelegte Spark-Standardeinstellungen EMR
Die folgende Tabelle zeigt, wie Amazon Standardwerte EMR festlegtspark-defaults
, die sich auf Anwendungen auswirken.
Von Amazon festgelegte Spark-Standardeinstellungen EMR | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Einstellung | Beschreibung | Standardwert | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.memory |
Die pro Executor-Prozess zu verwendende Größe des Speichers. Zum Beispiel: |
Diese Einstellung wird durch die Core- und Aufgaben-Instance-Typen im Cluster bestimmt. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.cores |
Die für jeden Executor zu verwendende Anzahl der Kerne. |
Diese Einstellung wird durch die Core- und Aufgaben-Instance-Typen im Cluster bestimmt. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.dynamicAllocation.enabled |
Wenn „wahr“, verwenden Sie die dynamische Ressourcenzuteilung, um die Anzahl der bei einer Anwendung registrierten Executoren basierend auf dem Workload nach oben oder unten zu skalieren. |
AnmerkungDer Spark-Shuffle-Service wird automatisch von Amazon EMR konfiguriert. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.sql.hive.advancedPartitionPredicatePushdown.enabled |
Wenn der Wert „wahr“ ist, ist der erweiterte Pushdown von Partitionsprädikaten in den Hive-Metastore aktiviert. |
true |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.sql.hive.stringLikePartitionPredicatePushdown.enabled |
Verschiebt und filtert AnmerkungGlue unterstützt das Prädikat-Pushdown für |
true |
Konfiguration der Spark-Garbage-Collection auf Amazon EMR 6.1.0
Das Einrichten von benutzerdefinierten Garbage-Collection-Konfigurationen mit spark.driver.extraJavaOptions
und spark.executor.extraJavaOptions
führt dazu, dass der Treiber- oder Executor-Start mit Amazon EMR 6.1 fehlschlägt, weil eine Konfiguration der Garbage-Collection-Konfiguration mit Amazon 6.1.0 in Konflikt steht. EMR Für Amazon EMR 6.1.0 wird die Standardkonfiguration für die Garbage-Collection über spark.driver.defaultJavaOptions
und spark.executor.defaultJavaOptions
festgelegt. Diese Konfiguration gilt nur für Amazon EMR 6.1.0. JVMOptionen, die nichts mit der Garbage-Collection zu tun haben, wie z. B. die für die Konfiguration von logging (-verbose:class
), können trotzdem verwendet werden. extraJavaOptions
Weitere Informationen finden Sie unter Spark-Anwendungs-Eigenschaften.
Verwenden von maximizeResourceAllocation
Um Ihre Executors so zu konfigurieren, dass sie auf jedem Knoten in einem Cluster die maximal möglichen Ressourcen nutzen, setzen Sie in Ihrer spark
-Konfigurationsklassifizierung maximizeResourceAllocation
auf true
. Das maximizeResourceAllocation
ist spezifisch für AmazonEMR. Wenn Sie diese Option aktivierenmaximizeResourceAllocation
, EMR berechnet Amazon die maximalen Rechen- und Speicherressourcen, die für einen Executor auf einer Instance in der Core-Instance-Gruppe verfügbar sind. Anschließend werden die entsprechenden spark-defaults
-Einstellungen auf der Grundlage der berechneten Höchstwerte festgelegt.
Amazon EMR berechnet die maximalen Rechen- und Speicherressourcen, die für einen Executor verfügbar sind, basierend auf einem Instance-Typ aus der Core-Instance-Flotte. Da jede Instance-Flotte unterschiedliche Instance-Typen und Größen innerhalb einer Flotte haben kann, ist die von Amazon EMR verwendete Executor-Konfiguration möglicherweise nicht die beste für Ihre Cluster. Daher empfehlen wir nicht, die Standardeinstellungen zu verwenden, wenn Sie die maximale Ressourcenzuweisung verwenden. Konfigurieren Sie benutzerdefinierte Einstellungen für Ihre Instance-Flottencluster.
Anmerkung
Sie sollten die maximizeResourceAllocation
Option nicht für Cluster mit anderen verteilten Anwendungen wie verwendenHBase. Amazon EMR verwendet benutzerdefinierte YARN Konfigurationen für verteilte Anwendungen, was zu Konflikten mit Spark-Anwendungen führen maximizeResourceAllocation
und zum Ausfall führen kann.
Im Folgenden finden Sie ein Beispiel für eine Spark-Konfigurationsklassifizierung mit der maximizeResourceAllocation
-Einstellung auf true
.
[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
Einstellungen, die in spark-defaults konfiguriert sind, wenn maximizeResourceAllocation aktiviert ist | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Einstellung | Beschreibung | Wert | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.default.parallelism | Die Standardanzahl von Partitionen wird bei Transformationen wie Join und Parallelize RDDs zurückgegeben reduceByKey, wenn sie nicht vom Benutzer festgelegt wurden. |
Zweimal so viele CPU Kerne stehen Containern zur Verfügung. YARN |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.driver.memory | Speichermenge, die für den Treiberprozess verwendet werden soll, d. h. wo er initialisiert SparkContext wird. (zum Beispiel 1 g, 2 g). |
Die Einstellung wird auf der Grundlage der Instance-Typen im Cluster konfiguriert. Da die Spark-Treiberanwendung jedoch entweder auf der primären oder auf einer der Kerninstanzen ausgeführt werden kann (z. B. im YARN Client- bzw. Cluster-Modus), wird dies auf der Grundlage des kleineren Instanztyps in diesen beiden Instanzgruppen festgelegt. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.memory | Die pro Executor-Prozess zu verwendende Größe des Speichers (beispielsweise 1g, 2g). |
Die Einstellung wird auf der Grundlage der Core- und der Aufgaben-Instance-Typen im Cluster konfiguriert. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.cores | Die für jeden Executor zu verwendende Anzahl der Kerne. | Die Einstellung wird auf der Grundlage der Core- und der Aufgaben-Instance-Typen im Cluster konfiguriert. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.instances | Die Anzahl der Executor. |
Die Einstellung wird auf der Grundlage der Core- und der Aufgaben-Instance-Typen im Cluster konfiguriert. Festgelegt, wenn |
Verhalten der Außerbetriebnahme von Knoten konfigurieren
Mit der EMR Amazon-Version 5.9.0 und höher EMR enthält Spark on Amazon eine Reihe von Funktionen, die sicherstellen, dass Spark die Knotenbeendigung aufgrund einer manuellen Größenänderung oder einer automatischen Skalierungsrichtlinienanforderung ordnungsgemäß verarbeitet. Amazon EMR implementiert in Spark einen Deny-Listing-Mechanismus, der auf dem Mechanismus YARN zur Außerbetriebnahme aufbaut. Dieser Mechanismus hilft sicherzustellen, dass keine neuen Aufgaben in einem Knoten geplant werden, der außer Betrieb genommen wird. Gleichzeitig werden bereits begonnene Aufgaben abgeschlossen. Darüber hinaus gibt es Funktionen, mit deren Hilfe Spark-Aufgaben schneller wiederhergestellt werden, wenn Shuffle-Blöcke bei der Beendigung eines Knotens verloren gehen. Der Neuberechnungsprozess wird früher ausgelöst und ist optimiert, um eine schnellere Neuberechnung mit weniger Stufenwiederholungen zu ermöglichen. Außerdem kann vermieden werden, dass Aufträge infolge von fehlenden Shuffle-Blöcken fehlschlagen.
Wichtig
Die spark.decommissioning.timeout.threshold
Einstellung wurde in EMR Amazon-Version 5.11.0 hinzugefügt, um die Spark-Resilienz bei der Verwendung von Spot-Instances zu verbessern. Wenn in früheren Versionen ein Knoten eine Spot Instance verwendet und die Instance aufgrund des Bid-Preises beendet wird, kann Spark die Beendigung möglicherweise nicht zuverlässig abschliessen. Aufträge können fehlschlagen und Shuffle-Neuberechnungen können eine geraume Zeit in Anspruch nehmen. Aus diesem Grund empfehlen wir die Nutzung von Version 5.11.0 oder höher, wenn Sie Spot Instances verwenden.
Einstellungen für die Außerbetriebnahme von Spark Node | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Einstellung | Beschreibung | Standardwert | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Wenn diese Option auf gesetzt ist |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Die Zeitspanne, wie lange ein Knoten im Status |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Verfügbar in EMR Amazon-Version 5.11.0 oder höher. In Sekunden angegeben. Wenn ein Knoten in den Status Außerbetriebnahme übergeht und der Host innerhalb eines Zeitraums außer Betrieb genommen wird, der diesem Wert entspricht oder darunter liegt, listet Amazon den Knoten EMR nicht nur auf, sondern bereinigt auch den Host-Status (wie von angegeben |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Wenn die Einstellung auf |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Wenn die Einstellung auf |
true |
ThriftServer Spark-Umgebungsvariable
Spark legt die Hive-Thrift-Server-Port-Umgebungsvariable HIVE_SERVER2_THRIFT_PORT
auf "10001" fest.
Ändern von Spark-Standardeinstellungen
Sie ändern die Standardwerte in spark-defaults.conf
mit der Konfigurationsklassifizierungspark-defaults
oder der Einstellung maximizeResourceAllocation
in der Konfigurationsklassifizierung spark
.
Die folgenden Verfahren zeigen, wie Sie Einstellungen mit der CLI OR-Konsole ändern.
Um einen Cluster zu erstellen, bei dem spark.executor.memory auf 2g gesetzt ist, verwenden Sie CLI
-
Erstellen Sie einen Cluster mit installiertem Spark und
spark.executor.memory
auf 2G gesetzt, indem Sie den folgenden Befehl eingeben, der auf die DateimyConfig.json
verweist, die in Amazon S3 gespeichert ist.aws emr create-cluster --release-label
emr-7.2.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.jsonAnmerkung
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 (^).
myConfig.json
:[ { "Classification": "spark-defaults", "Properties": { "spark.executor.memory": "2G" } } ]
Erstellen Sie einen Clustermithilfe der Konsole mit der Einstellung „spark.executor.memory“ auf „2G“ wie folgt
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.
-
Wählen Sie Create Cluster (Cluster erstellen) und Go to advanced options (Zu erweiterten Optionen) aus.
-
Wählen Sie Spark aus.
-
Lassen Sie unter Edit software settings (Softwareeinstellungen bearbeiten) die Option Enter configuration (Konfiguration eingeben) ausgewählt und nehmen Sie folgende Konfiguration vor:
classification=spark-defaults,properties=[spark.executor.memory=2G]
-
Wählen Sie andere Optionen aus, dann und anschließend Create cluster (Cluster erstellen).
Zum Einstellen maximizeResourceAllocation
-
Erstellen Sie einen Cluster, auf dem Spark installiert und auf true
maximizeResourceAllocation
gesetzt ist AWS CLI, indem Sie die in Amazon S3 gespeicherte Datei referenzierend verwenden.myConfig.json
aws emr create-cluster --release-label
emr-7.2.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.jsonAnmerkung
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 (^).
myConfig.json
:[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
Anmerkung
Mit EMR Amazon-Version 5.21.0 und höher können Sie Cluster-Konfigurationen überschreiben und zusätzliche Konfigurationsklassifizierungen für jede Instance-Gruppe in einem laufenden Cluster angeben. Sie tun dies, indem Sie die EMR Amazon-Konsole, die AWS Command Line Interface (AWS CLI) oder die verwenden AWS SDK. Weitere Informationen finden Sie unter Angeben einer Konfiguration für eine Instance-Gruppe in einem aktiven Cluster.
Migration von Apache Log4j 1.x zu Log4j 2.x
Apache-Spark-Versionenlog4j.properties
-Datei, um Log4j in Spark-Prozessen zu konfigurieren. Apache-Spark-Versionen 3.3.0 und höher verwenden Apache Log4j 2.x und die Datei log4j2.properties
, um Log4j in Spark-Prozessen zu konfigurieren.
Wenn Sie Apache Spark Log4j mit einer EMR Amazon-Version vor 6.8.0 konfiguriert haben, müssen Sie die alte spark-log4j
Konfigurationsklassifizierung entfernen und zur Konfigurationsklassifizierung und zum Schlüsselformat migrieren, bevor Sie ein Upgrade auf Amazon EMR 6.8.0 oder höher durchführen können. spark-log4j2
Die spark-log4j
Legacy-Klassifizierung führt dazu, dass die Clustererstellung in EMR Amazon-Versionen 6.8.0 und höher mit einem ValidationException
Fehler fehlschlägt. Ein Fehler im Zusammenhang mit der Log4j-Inkompatibilität wird Ihnen nicht in Rechnung gestellt. Sie müssen jedoch die Klassifizierung für die veraltete spark-log4j
-Konfiguration entfernen, um fortzufahren.
Weitere Informationen zur Migration von Apache Log4j 1.x zu Log4j 2.x finden Sie im Apache Log4j Migration Benutzerhandbuch
Anmerkung
Bei Amazon EMR verwendet Apache Spark eine log4j2.properties
Datei anstelle der im Apache Log4j