Flexible Dataproc-VMs

Flexible VMs ist eine Dataproc-Funktion, mit der Sie priorisierte Listen von VM-Typen für sekundäre Dataproc-Worker angeben können, wenn Sie einen Dataproc-Cluster erstellen.

Vorteile von flexiblen VMs

Bisher ist eine Anfrage zum Erstellen eines Clusters fehlgeschlagen, wenn ein VM-Typ nicht verfügbar war. Sie mussten dann Ihre Anfrage, Ihr Skript oder Ihren Code aktualisieren, um einen „nächstbesten“ VM-Typ anzugeben. Dieser Prozess kann mehrere Iterationen umfassen, bis Sie einen verfügbaren VM-Typ angegeben haben.

Die Funktion „Flexible VMs“ von Dataproc hilft Ihnen, Cluster zu erstellen, indem sekundäre Worker-VM-Typen aus Ihren sortierten VM-Listen ausgewählt und dann in der angegebenen Clusterregion nach Zonen mit Verfügbarkeit der aufgeführten VM-Typen gesucht wird.

Terminologie

  • VM-Typ: Die Familie, die Speicherkapazität und die Anzahl der CPU-Kerne einer VM-Instanz. Dataproc unterstützt die Verwendung von vordefinierten und benutzerdefinierten VM-Typen.

  • Sekundäre Worker: Sekundäre Worker speichern keine Daten. Sie funktionieren nur als Verarbeitungsknoten. Sie können sekundäre Worker verwenden, um die Computing-Skalierung zu skalieren, ohne den Speicher zu skalieren.

Einschränkungen und Überlegungen

  • Flexible VMs sind in Dataproc in Compute Engine 2.0.74+, 2.1.22+ und späteren Image-Versionen von Dataproc in Compute Engine verfügbar.

  • Sie können flexible VMs nur für sekundäre Worker angeben.

  • Sie können bis zu fünf sortierte Listen mit VM-Typen angeben, wobei jede Liste bis zu zehn VM-Typen enthalten kann. Weitere Informationen finden Sie unter Flexible VMs anfordern.

  • Zum Erstellen eines Clusters mit flexiblen VMs ist die Verwendung der automatischen Zonenplatzierung von Dataproc erforderlich. Dadurch kann Dataproc die Zone auswählen, die die Kapazität hat, Ihre VM-Typanforderungen zu erfüllen.

  • 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 Menge an Arbeitsspeicher und dieselbe Anzahl von Kernen haben.

  • Beim Bereitstellen flexibler VMs nutzt Dataproc alle verfügbaren Reservierungen vom Typ „Beliebige passende“, aber keine Reservierungen vom Typ „Bestimmte“ (siehe Reservierte Instanzen nutzen). Maschinentypen, die mit Reservierungen übereinstimmen, werden zuerst innerhalb eines Rangs ausgewählt, gefolgt von VM-Typen mit der größten Anzahl an CPUs.

  • Dataproc wendet Google Cloud Kontingente auf die flexible VM-Bereitstellung an.

  • Sie können zwar unterschiedliche CPU-zu-Arbeitsspeicher-Verhältnisse für primäre und sekundäre Worker-V-Typen in einem Cluster angeben, dies kann jedoch zu Leistungseinbußen führen, da das kleinste CPU-zu-Arbeitsspeicher-Verhältnis als kleinste Containereinheit verwendet wird.

  • Wenn Sie einen Cluster aktualisieren, der mit flexiblen VMs erstellt wurde, wählt Dataproc 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 flexible VMs angeben, wenn Sie einen Dataproc-Cluster über die Google Cloud Console, die Google Cloud CLI oder die Dataproc API erstellen.

  • Sie können bis zu fünf sortierte Listen mit VM-Typen angeben, wobei jede Liste bis zu zehn VM-Typen enthalten kann. Listen mit dem niedrigsten Rang haben die höchste Priorität. Standardmäßig haben flexible VM-Listen den Rang 0. In einer Liste priorisiert Dataproc 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.

Console

So erstellen Sie einen Cluster mit flexiblen VMs für sekundäre Worker:

  1. Öffnen Sie die Dataproc-Seite Cluster in Compute Engine erstellen in der Google Cloud Console.

  2. Der Bereich Cluster einrichten wird mit Feldern ausgewählt, die mit Standardwerten gefüllt sind. Sie können den vorgeschlagenen Namen und die Clusterregion ändern und andere Änderungen vornehmen. Achten Sie darauf, dass Beliebig als Zone des Clusters ausgewählt ist, damit die automatische Zonenplatzierung in Dataproc die Zone mit der besten Verfügbarkeit der in Ihren flexiblen VM-Listen angegebenen VM-Typen auswählen kann.

  3. Wählen Sie das Steuerfeld Knoten konfigurieren aus. Geben Sie im Bereich Sekundäre Worker-Knoten die Anzahl und Abrufbarkeit der sekundären Worker an.

    • Klicken Sie für jeden Rang sekundärer Worker auf Sekundären Worker hinzufügen und geben Sie einen oder mehrere Maschinentypen an, die in den jeweiligen Rang aufgenommen werden sollen.
  4. Nachdem Sie die Clusterdetails in den Feldern zum Erstellen von Clustern bestätigt und angegeben haben, klicken Sie auf Erstellen.

gcloud

Verwenden Sie den Befehl gcloud dataproc clusters create, um mehrere secondary-worker-machine-types-Flags hinzuzufügen, mit denen Sie sortierte flexible VM-Listen für sekundäre Dataproc-Worker angeben können. Der standardmäßige sekundäre Worker-Typ für flexible VMs ist „Spot“, ein Typ auf Abruf.

Im folgenden gcloud CLI-Beispiel versucht Dataproc, zuerst sekundäre Worker mit n2-standard-8-VMs (Rang 0) bereitzustellen. Wenn keine n2-standard-8-Maschinen verfügbar sind, versucht Dataproc, sekundäre Worker mit e2-standard-8- oder t2d-standard-8-VMs (Rang 1) bereitzustellen.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --master-machine-type=n1-standard-8 \
    --worker-machine-type=n1-standard-8 \
    --num-workers=4 \
    --num-secondary-workers=4 \
    --secondary-worker-type=non-preemptible \
    --secondary-worker-machine-types="type=n2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1"

Hinweise:

  • --zone="": Für das Feature „Flexible VMs“ ist die automatische Zonenplatzierung in Dataproc erforderlich, damit Dataproc die Zone auswählen kann, in der Ihre VM-Typen verfügbar sind. Wenn Sie dem Flag --zone einen leeren Wert („“) übergeben, wird jede Zonenauswahl überschrieben, die in Ihrer Standard-gcloud config list angegeben ist.

  • Dataproc generiert role-Komponenteneigenschaften basierend auf Maschinen-Cores und Arbeitsspeicher. Sie können diese vom System generierten Eigenschaften mit dem Flag --properties überschreiben. Verwenden Sie dazu die folgende Syntax:

    --properties="ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE"
    

    Nur die Rolle secondary_worker wird unterstützt.

    Im folgenden Beispiel wird mit dem Flag --properties die Anzahl der Kerne von e2-standard-8-Maschinen, die sekundären Worker-Knoten zugewiesen sind, von 8 auf 6 geändert:

    --properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"
    

API

Verwenden Sie instanceFlexibilityPolicy.instanceSelectionList als Teil einer Dataproc API-Anfrage clusters.create, um eine sortierte Liste von machineTypes für sekundäre Worker anzugeben.

Beispiel:

Im folgenden JSON-Snippet aus einem Anfragetext für Dataproc clusters.create werden Maschinentypen für sekundäre Worker für Rang 0 und Rang 1 angegeben.

"config": {
  "secondaryWorkerConfig": {
    "instanceFlexibilityPolicy": {
      "instanceSelectionList": [
        {
          "machineTypes": [
            "n1-standard-4",
            "n2-standard-4"
          ],
          "rank": 0
        },
        {
          "machineTypes": [
            "e2-standard-4",
            "n2d-standard-4"
          ],
          "rank": 1
        }
      ]
    }
  }
}

Komponentenrollen mit Clusterattributen anpassen:Dataproc generiert role-Komponenteneigenschaften basierend auf VM-Cores und ‑Arbeitsspeicher. Sie können diese systemgenerierten Eigenschaften überschreiben, indem Sie Ihrer clusters.create-Anfrage SoftwareConfig.properties hinzufügen. Verwenden Sie dazu die folgende key=value-Syntax:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE

Nur die Rolle secondary_worker wird unterstützt.

Im folgenden Beispiel ändert das Feld properties die Anzahl der Kerne, die dem sekundären Worker-Knoten einer e2-standard-8-VM zugewiesen sind, von 8 in 6:

"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"