Flexible VMs ist ein Feature von Managed Service for Apache Spark, mit dem Sie priorisierte Listen von VM-Typen für Managed Service for Apache Spark Master-, primäre und sekundäre Worker-Knoten angeben können, wenn Sie einen Managed Service for Apache Spark -Cluster erstellen.
Warum flexible VMs verwenden?
Das Problem: Wenn ein VM-Typ nicht verfügbar ist, wenn Sie eine Anfrage zum Erstellen eines Clusters senden, schlägt die Anfrage fehl. Sie müssen dann Ihre Anfrage, Ihr Skript oder Ihren Code aktualisieren, um einen „zweitbesten“ VM-Typ anzugeben. Dieser Prozess kann mehrere Iterationen umfassen, bis Sie einen verfügbaren VM-Typ angeben.
Die Lösung: Mit dem Feature „Flexible VMs“ von Managed Service for Apache Spark können Sie Ihre Anfrage zum Erstellen eines Clusters erfolgreich ausführen, indem Sie Master-, primäre und sekundäre Worker-VM-Typen aus Ihren sortierten VM-Listen auswählen und dann in der angegebenen Clusterregion nach Zonen suchen, in denen die aufgeführten VM-Typen verfügbar sind.
Beschränkungen
- Cluster, die flexible VMs verwenden, können nicht angehalten werden.
- Masterknoten in Hochverfügbarkeitsclustern können keine flexiblen VMs verwenden, aber Worker-Knoten von HA-Clustern können flexible VMs verwenden.
Terminologie
- VM-Typ:Die Familie, die Arbeitsspeicherkapazität und die Anzahl der CPU-Kerne einer VM-Instanz. Managed Service for Apache Spark unterstützt die Verwendung von vordefinierten und benutzerdefinierten VM-Typen.
- Master- und primäre Worker-Knoten:Standardmäßig hat ein Managed Service for Apache Spark-Cluster einen Masterknoten und zwei primäre Worker-Knoten.
- Ein Hochverfügbarkeits-Cluster (HA) hat drei Masterknoten.
- Ein Cluster mit einem einzelnen Knoten hat einen Knoten, der als Master- und Worker-Knoten fungiert.
- Ein Cluster mit null Knoten hat nur einen Masterknoten und sekundäre Worker (keine primären Worker).
- Sekundäre Worker-Knoten: Sekundäre Worker speichern keine Daten und fungieren nur als Verarbeitungsknoten. Sie können sekundäre Worker verwenden, um die Rechenleistung zu skalieren, ohne den Speicher zu skalieren. Der standardmäßige sekundäre Worker-Typ für flexible VMs ist eine Spot-VM, die ein Typ auf Abruf ist.
Nutzung
- Flexible VMs sind in Managed Service for Apache Spark in den Image-Versionen
2.0.74+,2.1.76+,2.2.42+und höher verfügbar. *. Wenn Sie ab der Image-Version3.0einen Cluster erstellen, ohne einen Maschinentyp für einen Clusterknoten anzugeben, gibt Managed Service for Apache Spark den Knoten mit einer sortierten Liste flexibler VM-Maschinentypen an, z. B. eine sortierte Liste von Maschinentypen der Serien N4, N2 und E2, wobei die Liste für die Ressourcenverfügbarkeit optimiert ist. - Sie können bis zu fünf sortierte VM-Typ-Listen mit jeweils bis zu 10 VM-Typen angeben.
Sie können flexible VMs in Workflow-Vorlagen einbeziehen, um die Ausfallsicherheit bei Ressourcenverfügbarkeit zu gewährleisten, wenn Cluster aus der Vorlage erstellt werden.
Empfehlung: Aktivieren Sie die automatische Zonenauswahl für Managed Service for Apache Spark . Dadurch kann Managed Service for Apache Spark eine Zone mit der Kapazität zum Bereitstellen der angeforderten VMs auswählen.
Standardmäßig muss ein Clusterknoten einen Laufwerkstyp verwenden. Sie können Laufwerksüberschreibungen verwenden, um verschiedene Laufwerkstypen für verschiedene Maschinentypen anzugeben, die für einen Flex-VM-Clusterknoten angegeben wurden.
Obwohl Sie für primäre und sekundäre Worker-VM-Typen in einem Cluster unterschiedliche CPU-zu-Arbeitsspeicher-Verhältnisse angeben können, kann dies zu Leistungseinbußen führen, da das kleinste CPU-zu-Arbeitsspeicher-Verhältnis als kleinste Containereinheit verwendet wird.
Wenn Ihre Anfrage zum Erstellen eines Clusters eine Autoscaling-Richtlinie, enthält, können flexible VMs aus verschiedenen VM-Familien stammen, müssen aber dieselbe Arbeitsspeicher- und Kernanzahl haben.
Maschinentypen, die mit Reservierungen übereinstimmen, werden zuerst innerhalb eines Rangs ausgewählt, gefolgt von VM-Typen mit der größten Anzahl von CPUs.
Managed Service for Apache Spark wendet Google Cloud Kontingente auf die Bereitstellung flexibler VMs an.
Wenn Sie einen Cluster aktualisieren, der mit flexiblen VMs erstellt wurde, wählt Managed Service for Apache Spark Worker aus den Listen flexibler VMs aus, die Sie beim Erstellen des Clusters angegeben haben, und fügt sie hinzu.
Flexible VMs anfordern
Sie können bis zu fünf sortierte VM-Typ-Listen mit jeweils bis zu 10 VM-Typen angeben. Listen mit dem niedrigsten Rang haben die höchste Priorität. Standardmäßig haben Listen flexibler VMs den Rang 0. Innerhalb einer Liste priorisiert Managed Service for Apache Spark VM-Typen mit nicht verwendeten Reservierungen, gefolgt von den größten VM-Größen. VM-Typen in einer Liste mit derselben Anzahl von CPUs werden gleich behandelt.
Sie können flexible VMs anfordern, wenn Sie einen Managed Service for Apache Spark Cluster über die Google Cloud Console, die Google Cloud CLI oder die Dataproc API erstellen.
Console
So erstellen Sie einen Cluster mit flexiblen VMs:
- Öffnen Sie die Seite Cluster erstellen.
- Klicken Sie auf Zusätzliche Konfiguration , um diesen Bereich zu maximieren.
- Bearbeiten Sie Primäre Worker oder Sekundäre Worker. Geben Sie unter Worker-Typen hinzufügen zusätzliche sortierte VMs an.
gcloud
Verwenden Sie den
gcloud dataproc clusters create
Befehl mit master-instance-selection, worker-instance-selection und
secondary-worker-instance-selection
Flags, um sortierte Listen flexibler VMs für Master-, primäre und
sekundäre Worker anzugeben.
Im folgenden Beispiel werden Master-, primäre und sekundäre VM-Typen mit den folgenden Prioritäten angefordert:
e2-standard-8-VMs bereitstellen, falls verfügbar (Rang 0). Wenne2-standard-8-Maschinen nicht verfügbar sind,n2-standard-8-VMs bereitstellen (Rang 1).
Da der sekundäre Worker-Typ nicht angegeben ist, werden sekundäre Spot-VMs auf Abruf bereitgestellt.
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--zone="" \
--master-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--master-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
--num-workers=10 \
--worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
--num-secondary-workers=4 \
--secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}'
Hinweise:
--zone="": Wenn Sie dieses Flag auf einen leeren Wert setzen, wird die automatische Zonenauswahl aktiviert. Dadurch kann Managed Service for Apache Spark eine Zone auswählen, in der die angeforderten VM-Typen verfügbar sind. Dieser Flagwert überschreibt jede Zonenauswahl, die in Ihrer Standardkonfigurationgcloud config listangegeben ist.
API
Verwenden Sie die instanceFlexibilityPolicy.instanceSelectionList
als Teil einer Dataproc API
clusters.create
Anfrage, um eine sortierte Liste von
machineTypes
für Master-, primäre und sekundäre Worker anzugeben.
Beispiel: Das folgende JSON-Snippet aus dem clusters.create
Anfragetext
gibt Maschinentypen für Master (masterConfig), primäre Worker (workerConfig) und sekundäre Worker
(secondaryWorkerConfig) mit den Rängen 0 und 1 an.
{
"projectId": "PROJECT_ID",
"clusterName": "CLUSTER_NAME",
"config": {
"gceClusterConfig": {
"zoneUri": ""
},
"masterConfig": {
"numInstances": 1,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
},
"workerConfig": {
"numInstances": 10,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
},
"secondaryWorkerConfig": {
"numInstances": 4,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
}
}
}
Laufwerksüberschreibungen
Sie können für jeden Maschinentyp (Instanzauswahl) in Ihrer Spezifikation für flexible VMs Laufwerksüberschreibungen angeben. So können Sie Bootlaufwerke anpassen, lokale SSDs überschreiben und zusätzliche Laufwerke für bestimmte Maschinentypen anhängen.
Optionen und Regeln für Laufwerksüberschreibungen
Konfigurationsoptionen für Laufwerksüberschreibungen:
- Basislaufwerkskonfiguration: Eine Laufwerkskonfiguration, die für einen Clusterknoten angegeben wurde, z. B. die Angabe einer Bootlaufwerkgröße für primäre Worker mit dem Flag
--worker-boot-disk-sizeder gcloud CLI oder dem FeldworkerConfig.diskConfig.bootDiskSizeGbder Dataproc API. - Laufwerksüberschreibungen für die Instanzauswahl:Laufwerkskonfigurationen für Maschinentypen, die für einen Clusterknoten angegeben wurden.
Konfigurationsregeln für Laufwerksüberschreibungen:
Basislaufwerkskonfiguration:Wenn keine Instanzauswahl für einen Clusterknoten eine
diskConfig-Überschreibung enthält, können Sie eine Basislaufwerkskonfiguration für den Knoten definieren. Diese Basislaufwerkskonfiguration wird auf alle Instanzauswahlen für den Knoten angewendet.Laufwerkskonfigurationen für die Instanzauswahl:Wenn eine Instanzauswahl für einen Clusterknoten eine
diskConfig-Überschreibung enthält, müssen alle Instanzauswahlen in der Knotengruppe einediskConfigenthalten. Wenn Sie auch eine Basislaufwerkskonfiguration für den Knoten definieren, tritt ein Validierungsfehler auf.Kompatibilität von Maschinentypen:Alle Maschinentypen in einer einzelnen
InstanceSelectionmüssen mit der angegebenendiskConfigkompatibel sein. Sie können beispielsweise keinene2-standard-4-Maschinentyp, der keine Hyperdisk unterstützt, mit einemn4-standard-4-Maschinentyp gruppieren, der eine Hyperdisk erfordert, da diediskConfignicht für beide Maschinentypen geeignet ist.Unterstützung für lokale SSDs:Wenn Sie in einer Konfiguration für Laufwerksüberschreibungen lokale SSDs konfigurieren (
numLocalSsds> 0), müssen alle Maschinentypen in der Instanzauswahl lokale SSDs unterstützen.Pflichtfelder für die Konfiguration von Laufwerksüberschreibungen :
- Wenn Sie
diskConfigfür eine Instanzauswahl definieren, istbootDiskTypeerforderlich. - Wenn Sie
attachedDiskConfigsdefinieren, sind sowohldiskTypeals auchdiskSizeGbfür jedes angehängte Laufwerk erforderlich.
- Wenn Sie
Beispiele für die Konfiguration von Laufwerksüberschreibungen
Im folgenden Beispiel werden die folgenden Konfigurationsoptionen für Laufwerksüberschreibungen für die folgenden Clusterknoten angegeben:
- Masterknoten:Standard-Bootlaufwerke verwenden.
- Primäre Worker:Angepasste Laufwerke pro Instanzauswahl verwenden. Beispiel:
n4-standard-4verwendethyperdisk-balanced, währendn2-standard-4pd-standardverwendet. - Sekundäre Worker:Eine benutzerdefinierte Basislaufwerkskonfiguration verwenden:
pd-ssdmit200 GB, die auf alle Instanzauswahlen angewendet wird.
gcloud YAML
Definieren Sie die Richtlinien für flexible VMs in YAML-Dateien für Master-, primäre und sekundäre Worker-Knoten:
master-flex-policy.yaml:instanceFlexibilityPolicy: instanceSelectionList: - machineTypes: - e2-standard-8 rank: 0 - machineTypes: - n2-standard-8 rank: 1worker-flex-policy.yaml:instanceFlexibilityPolicy: instanceSelectionList: - machineTypes: - n4-standard-4 rank: 0 diskConfig: bootDiskType: hyperdisk-balanced bootDiskSizeGb: 100 bootDiskProvisionedIops: 6000 bootDiskProvisionedThroughput: 400 attachedDiskConfigs: - diskType: hyperdisk-throughput diskSizeGb: 300 - machineTypes: - n2-standard-4 rank: 0 diskConfig: bootDiskType: pd-standard bootDiskSizeGb: 400secondary-worker-flex-policy.yaml:instanceFlexibilityPolicy: instanceSelectionList: - machineTypes: - e2-standard-8 rank: 0 - machineTypes: - n2-standard-8 rank: 1
Verwenden Sie den gcloud dataproc clusters create
Befehl, um die Richtliniendateien zu übergeben:
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--zone="" \
--num-masters=1 \
--master-instance-flexibility-policy-file=master-flex-policy.yaml \
--num-workers=10 \
--worker-instance-flexibility-policy-file=worker-flex-policy.yaml \
--num-secondary-workers=4 \
--secondary-worker-boot-disk-type=pd-ssd \
--secondary-worker-boot-disk-size=200 \
--secondary-worker-instance-flexibility-policy-file=secondary-worker-flex-policy.yaml
gcloud JSON
Verwenden Sie den gcloud dataproc clusters create
Befehl mit Inline-JSON-diskConfigSpezifikationen in --worker-instance-selection:
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--zone="" \
--num-masters=1 \
--master-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--master-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
--num-workers=10 \
--worker-instance-selection='{"machineTypes":["n4-standard-4"],"rank":0,"diskConfig":{"bootDiskType":"hyperdisk-balanced","bootDiskSizeGb":100,"bootDiskProvisionedIops":6000,"bootDiskProvisionedThroughput":400,"attachedDiskConfigs":[{"diskType":"hyperdisk-throughput","diskSizeGb":300}]}}' \
--worker-instance-selection='{"machineTypes":["n2-standard-4"],"rank":0,"diskConfig":{"bootDiskType":"pd-standard","bootDiskSizeGb":400}}' \
--num-secondary-workers=4 \
--secondary-worker-boot-disk-type=pd-ssd \
--secondary-worker-boot-disk-size=200 \
--secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}'
API
Verwenden Sie das Feld diskConfig in einer instanceFlexibilityPolicy.instanceSelectionList in einer clusters.create-Anfrage der Dataproc API.
Beispiel für einen JSON-Anfragetext:
{
"projectId": "PROJECT_ID",
"clusterName": "CLUSTER_NAME",
"config": {
"gceClusterConfig": {
"zoneUri": ""
},
"masterConfig": {
"numInstances": 1,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
},
"workerConfig": {
"numInstances": 10,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["n4-standard-4"],
"rank": 0,
"diskConfig": {
"bootDiskType": "hyperdisk-balanced",
"bootDiskSizeGb": 100,
"bootDiskProvisionedIops": 6000,
"bootDiskProvisionedThroughput": 400,
"attachedDiskConfigs": [
{
"diskType": "HYPERDISK_THROUGHPUT",
"diskSizeGb": 2048
}
]
}
},
{
"machineTypes": ["n2-standard-4"],
"rank": 0,
"diskConfig": {
"bootDiskType": "pd-standard",
"bootDiskSizeGb": 400
}
}
]
}
},
"secondaryWorkerConfig": {
"numInstances": 4,
"diskConfig": {
"bootDiskType": "pd-ssd",
"bootDiskSizeGb": 200
},
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
}
}
}
Attribute flexibler VMs überschreiben
Managed Service for Apache Spark legt Attribute auf Clusterebene fest. Wenn Sie einen Cluster erstellen, der flexible VMs verwendet, können Sie vom System generierte Attribute für primäre und sekundäre Worker-VM-Typen überschreiben.
gcloud
Verwenden Sie das Flag --properties mit der folgenden Syntax, um Attribute beim Erstellen eines Clusters zu überschreiben:
--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
- ROLE kann entweder
primary_workerodersecondary_workersein. - Trennen Sie mehrere Attribute durch ein Komma.
Mit dem folgenden Befehl gcloud dataproc clusters create wird die Anzahl der vCPUs überschrieben, die YARN für NodeManager auf sekundären Workern zuweist.
In diesem Beispiel wird der Wert yarn.nodemanager.resource.cpu-vcores in yarn-site.xml für alle sekundären Worker-VMs vom Typ e2-standard-8 und n2-standard-8 auf 6 gesetzt.
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--zone="" \
--master-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--master-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
--num-workers=10 \
--worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
--num-secondary-workers=4 \
--secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
--secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
--properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6,secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"
API
Wenn Sie Attribute überschreiben möchten, definieren Sie sie im properties Feld des
SoftwareConfig
Objekts in Ihrer Anfrage zum Erstellen eines Clusters.
Verwenden Sie die folgende Syntax für den Attributschlüssel:
ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
- ROLE kann entweder
primary_workerodersecondary_workersein.
Mit dem folgenden Objekt SoftwareConfig wird die Anzahl der vCPUs überschrieben, die YARN für NodeManager auf sekundären Workern zuweist. In diesem Beispiel wird der Wert yarn.nodemanager.resource.cpu-vcores für alle sekundären Worker-VMs vom Typ e2-standard-8 und n2-standard-8 auf 6 gesetzt.
{
"imageVersion":"2.2.42",
"properties": {
"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6",
"secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6"
}
}
Nächste Schritte
- Weitere Informationen zu den Clustereigenschaften von Managed Service for Apache Spark.
- Informationen zum Erstellen eines Managed Service for Apache Spark Clusters.