Automatische Anwendungsskalierung aktivieren
Es ist nicht immer möglich, den Ressourcenbedarf (Anzahl der Spark-Executors) einer Spark-Anwendung im Voraus zu schätzen, da diese Anforderungen je nach Größe der Eingabedatei variieren können.
Um Sie in dieser Situation zu unterstützen, können Sie eine Spark-Anwendung mit automatischer Skalierung übergeben, die die Anzahl der Executors, die für eine Anwendung erforderlich sind, basierend auf dem Bedarf der Anwendung automatisch bestimmt.
Sie können die automatische Basisskalierung für eine Spark-Anwendung aktivieren, indem Sie der vorhandenen Anwendungskonfiguration die Konfigurationseinstellung ae.spark.autoscale.enable=truehinzufügen.
Anwendung mit automatischer Basisskalierung übergeben
Die Schritte zum Übergeben einer Anwendung mit aktivierter automatischer Skalierung entsprechen den Schritten zum Übergeben einer Anwendung ohne automatische Skalierung. Der einzige Unterschied ist, dass Sie die Konfigurationseinstellung ae.spark.autoscale.enable=trueden
Anwendungsnutzdaten hinzufügen müssen.
- Spark-Anwendung übergeben.
- Verwenden Sie die folgenden JSON-Beispielnutzdaten als Beispiel, um die automatische Basisskalierung zu aktivieren:
{ "application_details": { "application": "/opt/ibm/spark/examples/src/main/python/wordcount.py", "arguments": ["/opt/ibm/spark/examples/src/main/resources/people.txt"] }, "conf": { "ae.spark.autoscale.enable":"true" } }
Anwendungskonfigurationen automatisch skalieren
Sie können die folgenden Konfigurationseinstellungen verwenden, um die automatische Skalierung der Executor-Anzahl weiter zu steuern.
| Konfigurationseinstellungen | Beschreibung | Standard |
|---|---|---|
ae.spark.autoscale.enable |
Signalisiert, dass die Anwendung basierend auf dem Bedarf der Anwendung und allen anderen festgelegten Konfigurationen für automatische Skalierung automatisch skaliert wird. Wenn auf Instanzebene angegeben, werden alle Anwendungen in der Instanz automatisch skaliert. | Nein |
spark.dynamicAllocation.initialExecutors |
Gibt die anfängliche Anzahl der zu erstellenden Steuerprogramme an, unabhängig von den Anforderungen der Spark-Anwendung | 0 |
spark.dynamicAllocation.minExecutors |
Gibt die Mindestanzahl von Steuerprogrammen an, die unabhängig von der Anforderung durch die Spark-Anwendung verwaltet werden müssen. | 0 |
spark.dynamicAllocation.maxExecutors |
Gibt die maximale Anzahl der Steuerprogramme an, die unabhängig von den Anforderungen der Spark-Anwendung zu erstellen sind. | 2 |
ae.spark.autoscale.scaleupDemandPercentage |
Gibt den Prozentsatz der Steuerprogramme an, die von der Spark-Anwendung angefordert werden und die vom Autoscaler der Anwendung erfüllt werden sollen. Wenn beispielsweise eine Spark-Anwendung zu einem bestimmten Zeitpunkt 10 Steuerprogramme anfordert und der Wert für diese Konfiguration auf 50 Prozent gesetzt ist, skaliert der automatische Anwendungsscaler die Anzahl der Steuerprogramme um 5. Der Standardwert dieser Konfiguration ist 100 Prozent. Dies bedeutet im Wesentlichen, dass eine beliebige Anzahl von Steuerprogrammen, die von der Anforderung einer Anwendung angefordert werden, vom Autoscaler der Anwendung hinzugefügt werden kann. | 100 |
ae.spark.autoscale.scaledownExcessPercentage |
Gibt den Prozentsatz der inaktiven Steuerprogramme an, die von der Spark-Anwendung angehalten wurden und von der automatischen Skalierung der Anwendung entfernt werden sollen. Wenn beispielsweise nach Abschluss einer bestimmten Phase in einer Spark-Anwendung 20 inaktive Steuerprogramme von der Anwendung angehalten werden und der Wert für diese Konfiguration auf 25 Prozent gesetzt ist, skaliert der Autoscaler der Anwendung die Steuerprogramme in der Anwendung um 4 Steuerprogramme nach unten. Der Standardwert für diese Konfiguration ist 100 Prozent. Dies bedeutet, dass der Autoscaler der Anwendung alle inaktiven Steuerprogramme nach unten skalieren kann. | 100 |
ae.spark.autoscale.frequency |
Die Häufigkeit in Sekunden, mit der der Autoscaler der Anwendung ein Scale-up für Steuerprogramme oder ein Scale-down für Steuerprogramme in einer Anwendung ausführt. | 10s |
Beispiel für Nutzdaten einer Anwendung mit automatischer Skalierung, die die Unter-und Obergrenzen für die Anzahl der Steuerprogramme zeigt, auf die die Anwendung ein Scale-up oder Scale-down durchführen kann.
{
"application_details": {
"application": "cos://<application-bucket-name>.<cos-reference-name>/my_spark_application.py",
"conf": {
"ae.spark.autoscale.enable": "true",
"spark.dynamicAllocation.initialExecutors": "0",
"spark.dynamicAllocation.minExecutors": "1",
"spark.dynamicAllocation.maxExecutors": "10",
"spark.hadoop.fs.cos.<cos-reference-name>.endpoint": "s3.direct.us-south.cloud-object-storage.appdomain.cloud",
"spark.hadoop.fs.cos.<cos-reference-name>.iam.api.key": "<iam-api-key-of-application-bucket>"
}
}
}
Automatische Skalierung für eine Instanz aktivieren
Standardmäßig ist die automatische Anwendungsskalierung inaktiviert, wenn Sie eine Instanz des Analytics Engine Standard-Serverless-Plans erstellen. Wenn Sie die automatische Skalierung für alle Anwendungen auf Instanzebene aktivieren wollen, können Sie beim Erstellen der Instanz explizit "ae.spark.autoscale.enable": "true" als Spark-Standardkonfiguration festlegen. Siehe Standardmäßige Sparkkonfiguration.