VM-Typen mit flexiblen VMs priorisieren

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.
  • 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-Version 3.0 einen 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:

  1. Öffnen Sie die Seite Cluster erstellen.
  2. Klicken Sie auf Zusätzliche Konfiguration , um diesen Bereich zu maximieren.
  3. 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). Wenn e2-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:

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-size der gcloud CLI oder dem Feld workerConfig.diskConfig.bootDiskSizeGb der 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 eine diskConfig enthalten. Wenn Sie auch eine Basislaufwerkskonfiguration für den Knoten definieren, tritt ein Validierungsfehler auf.

  • Kompatibilität von Maschinentypen:Alle Maschinentypen in einer einzelnen InstanceSelection müssen mit der angegebenen diskConfig kompatibel sein. Sie können beispielsweise keinen e2-standard-4-Maschinentyp, der keine Hyperdisk unterstützt, mit einem n4-standard-4-Maschinentyp gruppieren, der eine Hyperdisk erfordert, da die diskConfig nicht 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 diskConfig für eine Instanzauswahl definieren, ist bootDiskType erforderlich.
    • Wenn Sie attachedDiskConfigs definieren, sind sowohl diskType als auch diskSizeGb für jedes angehängte Laufwerk erforderlich.

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-4 verwendet hyperdisk-balanced, während n2-standard-4 pd-standard verwendet.
  • Sekundäre Worker:Eine benutzerdefinierte Basislaufwerkskonfiguration verwenden: pd-ssd mit 200 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:

  1. master-flex-policy.yaml:
    instanceFlexibilityPolicy:
      instanceSelectionList:
      - machineTypes:
        - e2-standard-8
        rank: 0
      - machineTypes:
        - n2-standard-8
        rank: 1
  2. worker-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: 400
  3. secondary-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_worker oder secondary_worker sein.
  • 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_worker oder secondary_worker sein.

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