Grundlegende Konzepte für Apache Spark in Azure Synapse Analytics
Apache Spark ist ein Framework für die Parallelverarbeitung, das In-Memory-Verarbeitung unterstützt, um die Leistung von Big Data-Analyseanwendungen zu steigern. Apache Spark in Azure Synapse Analytics ist eine der cloudbasierten Apache Spark-Implementierungen von Microsoft.
Azure Synapse vereinfacht das Erstellen und Konfigurieren von Spark-Funktionen in Azure. Azure Synapse bietet eine andere Implementierung der hier dokumentierten Spark-Funktionen.
Spark-Pools
Ein serverloser Apache Spark-Pool wird im Azure-Portal erstellt. Bei der Instanziierung eines Spark-Pools wird die Definition des Pools verwendet, um eine Spark-Instanz für die Datenverarbeitung zu erstellen. Wenn ein Spark-Pool erstellt wird, ist er nur in Form von Metadaten vorhanden. Es werden keine Ressourcen verbraucht, ausgeführt oder in Rechnung gestellt. Ein Spark-Pool verfügt über eine Reihe von Eigenschaften zur Steuerung der Merkmale einer Spark-Instanz. Zu diesen Merkmalen zählen unter anderem der Name, die Größe, das Skalierungsverhalten und die Gültigkeitsdauer.
Da im Zusammenhang mit der Erstellung von Spark-Pools keine Gebühren oder Ressourcenkosten entstehen, kann eine beliebige Anzahl mit beliebig vielen verschiedenen Konfigurationen erstellt werden. Auf Spark-Pools können auch Berechtigungen angewendet werden, um zu steuern, auf welche Pools Benutzer zugreifen können.
Eine bewährte Methode besteht darin, kleinere Spark-Pools für die Entwicklung und das Debugging und anschließend größere Spark-Pools für die Ausführung von Produktionsworkloads zu erstellen.
Informationen zum Erstellen eines Spark-Pools sowie zu allen verfügbaren Eigenschaften finden Sie unter Schnellstart: Erstellen eines neuen serverlosen Apache Spark-Pools über das Azure-Portal.
Spark-Instanzen
Spark-Instanzen werden erstellt, wenn Sie eine Verbindung mit einem Spark-Pool herstellen, eine Sitzung erstellen und einen Auftrag ausführen. Da mehrere Benutzer Zugriff auf einen einzelnen Spark-Pool haben können, wird für jeden Benutzer, der eine Verbindung herstellt, eine neue Spark-Instanz erstellt.
Wenn Sie einen zweiten Auftrag übermitteln und Kapazität im Pool verfügbar ist, verfügt auch die vorhandene Spark-Instanz über Kapazität. Anschließend wird der Auftrag von der bereits vorhandenen Instanz verarbeitet. Andernfalls wird eine neue Spark-Instanz erstellt, wenn Kapazität auf Poolebene verfügbar ist.
Die Abrechnung für die Instanzen beginnt, wenn die Azure-VM(s) gestartet werden. Die Abrechnung für die Spark-Poolinstanzen wird beendet, wenn der Status von Poolinstanzen in „wird beendet“ geändert wird. Weitere Informationen zum Starten von Azure-VMs finden Sie unter Status und Abrechnungsstatus von Azure Virtual Machines.
Beispiele
Beispiel 1
- Sie erstellen einen Spark-Pool mit Namen SP1, er hat eine feste Clustergröße von 20 mittleren Knoten
- Sie übermitteln einen Notebookauftrag (J1), der 10 Knoten verwendet, und eine Spark-Instanz (SI1) wird erstellt, um den Auftrag zu verarbeiten
- Jetzt übermitteln Sie einen weiteren Auftrag (J2), der 10 Knoten beansprucht, weil noch Kapazität im Pool und der Instanz verfügbar ist, und der Auftrag J2 wird von SI1 verarbeitet
- Wenn J2 11 Knoten angefordert hätte, wäre keine Kapazität im SP1 oder in der SI1 vorhanden gewesen. In diesem Fall gilt: Wenn J2 von einem Notebook stammt, wird der Auftrag abgelehnt. Stammt J2 aus einem Batchauftrag, wird er in die Warteschlange eingereiht.
- Die Abrechnung beginnt mit der Übermittlung des Notebookauftrags J1.
- Der Spark-Pool wird mit 20 mittleren Knoten mit jeweils 8 virtuellen Kernen instanziiert und benötigt in der Regel ca. 3 Minuten zum Starten. 20 x 8 = 160 virtuelle Kerne.
- Abhängig von der genauen Startzeit des Spark-Pools, dem Leerlauftimeout und der Laufzeit der beiden Notebookaufträge wird der Pool wahrscheinlich zwischen 18 und 20 Minuten lang ausgeführt (Instanziierungszeit des Spark-Pools + Laufzeit des Notebookauftrags + Leerlauftimeout).
- Angenommen, 20 Minuten Laufzeit, 160 x 0,3 Stunden = 48 virtuelle Kernstunden.
- Hinweis: Stunden virtueller Kerne werden pro Sekunde abgerechnet, die Preise für virtuelle Kerne variieren je nach Azure-Region. Weitere Informationen finden Sie unter Preise für Azure Synapse
Beispiel 2
- Sie erstellen einen Spark-Pool mit Namen SP2. Er verfügt über eine aktivierte Autoskalierung mit mindestens 10 bis maximal 20 mittleren Knoten
- Sie übermitteln einen Notebookauftrag J1, der 10 Knoten verwendet, und eine Spark-Instanz SI1 wird erstellt, um den Auftrag zu verarbeiten
- Jetzt übermitteln Sie einen weiteren Auftrag (J2), der 10 Knoten beansprucht, und weil noch Kapazität im Pool verfügbar ist, skaliert die Instanz automatisch auf 20 Knoten und verarbeitet J2.
- Die Abrechnung beginnt mit der Übermittlung des Notebookauftrags J1.
- Der Spark-Pool wird mit 10 mittleren Knoten mit jeweils 8 virtuellen Kernen instanziiert und benötigt in der Regel ca. 3 Minuten zum Starten. 10 x 8 = 80 virtuelle Kerne.
- Bei der Übermittlung von J2 wird der Pool automatisch skaliert, indem weitere 10 mittlere Knoten hinzugefügt werden, und die Autoskalierung dauert in der Regel 4 Minuten. Hinzufügen von 10 x 8 = 80 virtuellen Kernen für insgesamt 160 virtuelle Kerne.
- Abhängig von der Startzeit des Spark-Pools, der Laufzeit des ersten Notebookauftrags J1, der Zeit zum Hochskalieren des Pools, der Laufzeit des zweiten Notebooks und schließlich dem Leerlauftimeout, wird der Pool wahrscheinlich zwischen 22 und 24 Minuten lang ausgeführt (Instanziierungszeit des Spark-Pools + Laufzeit des J1-Notebookauftrags bei jeweils 80 virtuellen Kernen) + (Automatische Hochskalierungszeit des Spark-Pools + Laufzeit des J2-Notebookauftrags + Leerlauftimeout bei jeweils 160 virtuellen Kernen).
- 80 virtuelle Kerne für 4 Minuten + 160 virtuelle Kerne für 20 Minuten = 58,67 virtuelle Kernstunden.
- Hinweis: Stunden virtueller Kerne werden pro Sekunde abgerechnet, die Preise für virtuelle Kerne variieren je nach Azure-Region. Weitere Informationen finden Sie unter Preise für Azure Synapse
Beispiel 3
- Sie erstellen einen Spark-Pool namens „SP1“ mit einer festen Clustergröße von 20 Knoten.
- Sie übermitteln einen Notebookauftrag J1, der 10 Knoten beansprucht, und eine Spark-Instanz SI1 wird erstellt, um den Auftrag zu verarbeiten.
- Ein anderer Benutzer (U2) übermittelt einen Auftrag J3, der 10 Knoten beansprucht, und es wird eine neue Spark-Instanz SI2 erstellt, um den Auftrag zu verarbeiten.
- Jetzt übermitteln Sie einen weiteren Auftrag (J2), der 10 Knoten beansprucht. Weil noch Kapazität im Pool und der Instanz verfügbar ist, wird der Auftrag J2 von SI1 verarbeitet.
- Die Abrechnung beginnt bei der Übermittlung des Notebookauftrags J1.
- Der Spark-Pool SI1 wird mit 20 mittleren Knoten mit jeweils 8 virtuellen Kernen instanziiert und benötigt in der Regel ca. 3 Minuten zum Starten. 20 x 8 = 160 virtuelle Kerne.
- Abhängig von der genauen Startzeit des Spark-Pools, dem Leerlauftimeout und der Laufzeit des ersten und dritten Notebookauftrags wird der SI1-Pool wird wahrscheinlich zwischen 18 und 20 Minuten lang ausgeführt (Instanziierungszeit des Spark-Pools + Laufzeit des Notebookauftrags + Leerlauftimeout).
- Ein weiterer Spark-Pool SI2 wird mit 20 mittleren Knoten mit jeweils 8 virtuellen Kernen instanziiert und benötigt in der Regel ca. 3 Minuten zum Starten. 20 x 8 = 160 virtuelle Kerne
- Abhängig von der genauen Startzeit des Spark-Pools, dem Leerlauftimeout und der Laufzeit des ersten Notebookauftrags wird der SI2-Pool wahrscheinlich zwischen 18 und 20 Minuten lang ausgeführt (Instanziierungszeit des Spark-Pools + Laufzeit des Notebookauftrags + Leerlauftimeout).
- Angenommen, die beiden Pools werden jeweils 20 Minuten lang ausgeführt, 160 x 0,3 x 2 = 96 virtuelle Kernstunden.
- Hinweis: Stunden virtueller Kerne werden pro Sekunde abgerechnet, die Preise für virtuelle Kerne variieren je nach Azure-Region. Weitere Informationen finden Sie unter Preise für Azure Synapse
Kontingente und Ressourceneinschränkungen in Apache Spark für Azure Synapse
Arbeitsbereichsebene
Jeder Azure Synapse-Arbeitsbereich verfügt über ein Standardkontingent von virtuellen Kernen, das für Spark verwendet werden kann. Das Kontingent wird zwischen dem Benutzerkontingent und dem Datenflusskontingent aufgeteilt, sodass keines der beiden Verwendungsmuster alle virtuellen Kerne im Arbeitsbereich erschöpfend verwendet. Das Kontingent ist in Abhängigkeit vom Typ Ihres Abonnements jeweils anders, wird jedoch symmetrisch zwischen Benutzer und Datenfluss verteilt. Wenn Sie allerdings mehr virtuelle Kerne anfordern, als im Arbeitsbereich verbleiben, erhalten Sie die folgende Fehlermeldung:
Failed to start session: [User] MAXIMUM_WORKSPACE_CAPACITY_EXCEEDED
Your Spark job requested 480 vCores.
However, the workspace only has xxx vCores available out of quota of yyy vCores.
Try reducing the numbers of vCores requested or increasing your vCore quota. Click here for more information - https://go.microsoft.com/fwlink/?linkid=213499
Der Link in der Meldung verweist auf diesen Artikel.
Im folgenden Artikel wird beschrieben, wie Sie eine Erhöhung des Arbeitsbereichskontingents für virtuelle Kerne anfordern.
- Wählen Sie als Diensttyp „Azure Synapse Analytics“ aus.
- Wählen Sie im Fenster „Kontingentdetails“ die Option „Apache Spark (vCore) pro Arbeitsbereich“ aus.
Anfordern einer Kapazitätserhöhung über das Azure-Portal
Spark-Poolebene
Wenn Sie einen Spark-Pool definieren, definieren Sie effektiv ein Kontingent pro Benutzer für diesen Pool. Wenn Sie mehrere Notebooks oder Aufträge oder eine Mischung aus beiden ausführen, kann das Poolkontingent erschöpft werden. Wenn Sie dies tun, wird eine Fehlermeldung generiert
Failed to start session: Your Spark job requested xx vCores.
However, the pool is consuming yy vCores out of available zz vCores.Try ending the running job(s) in the pool, reducing the numbers of vCores requested, increasing the pool maximum size or using another pool
Um dieses Problem zu beheben, müssen Sie Ihren Verbrauch der Poolressourcen verringern, bevor Sie durch Ausführen eines Notebooks oder eines Auftrags eine neue Ressourcenanforderung übermitteln.