Memprioritaskan jenis VM dengan VM fleksibel

Flexible VM adalah fitur Managed Service untuk Apache Spark yang memungkinkan Anda menentukan daftar jenis VM yang diprioritaskan untuk node master, worker primer, dan worker sekunder Managed Service untuk Apache Spark saat Anda membuat cluster Managed Service untuk Apache Spark.

Mengapa menggunakan VM fleksibel?

Masalahnya: Jika jenis VM tidak tersedia saat Anda mengirimkan permintaan pembuatan cluster, permintaan tersebut akan gagal, dan Anda harus memperbarui permintaan, skrip, atau kode untuk menentukan jenis VM "terbaik berikutnya". Proses permintaan ulang ini dapat melibatkan beberapa iterasi hingga Anda menentukan jenis VM yang tersedia.

Solusinya: Fitur VM fleksibel Managed Service untuk Apache Spark membantu permintaan pembuatan cluster Anda berhasil dengan memilih jenis worker VM master, primer, dan sekunder dari daftar VM yang diberi peringkat, lalu menelusuri zona dalam region cluster yang Anda tentukan dengan ketersediaan jenis VM yang tercantum.

Batasan

  • Cluster yang menggunakan VM fleksibel tidak dapat dihentikan.
  • Node master di Cluster ketersediaan tinggi tidak dapat menggunakan VM fleksibel, tetapi worker node cluster HA dapat menggunakan VM fleksibel.

Terminologi

  • Jenis VM: Kelompok, kapasitas memori, dan jumlah core CPU instance VM. Managed Service untuk Apache Spark mendukung penggunaan jenis VM yang telah ditetapkan dan kustom.
  • Node master dan worker utama: Secara default, cluster Managed Service untuk Apache Spark memiliki satu node master dan dua node worker utama.
  • Node worker sekunder: Worker sekunder tidak menyimpan data dan hanya berfungsi sebagai node pemrosesan. Anda dapat menggunakan worker sekunder untuk menskalakan komputasi tanpa menskalakan penyimpanan. Jenis worker sekunder VM fleksibel default adalah Spot VM, yang merupakan jenis preemptible.

Penggunaan

  • VM fleksibel tersedia di Managed Service untuk Apache Spark pada Managed Service untuk Apache Spark 2.0.74+, 2.1.76+, 2.2.42+, dan versi imageversions yang lebih baru.
    • Mulai versi image 3.0, saat Anda membuat cluster tanpa menentukan jenis mesin untuk node cluster, Managed Service untuk Apache Spark menentukan node dengan daftar peringkat jenis mesin VM yang fleksibel, seperti daftar peringkat jenis mesin seri N4, N2, dan E2, dengan daftar yang dioptimalkan untuk ketersediaan resource.
  • Anda dapat menentukan hingga lima daftar jenis VM yang diberi peringkat, dengan maksimal 10 jenis VM dalam daftar.

  • Anda dapat menyertakan VM Fleksibel dalam template alur kerja untuk memberikan ketahanan terhadap ketidaktersediaan resource saat cluster dibuat dari template.

    Rekomendasi: Aktifkan penempatan zona otomatis Managed Service untuk Apache Spark, yang memungkinkan Managed Service untuk Apache Spark memilih zona dengan kapasitas untuk menyediakan VM yang diminta.

  • Secara default, node cluster harus menggunakan satu jenis disk. Anda dapat menggunakan penggantian disk untuk menentukan jenis disk yang berbeda untuk berbagai jenis mesin yang ditentukan untuk node cluster VM Flex.

  • Meskipun Anda dapat menentukan rasio CPU terhadap memori yang berbeda untuk jenis worker VM primer dan sekunder dalam sebuah cluster, hal ini dapat menyebabkan penurunan performa karena rasio CPU terhadap memori terkecil digunakan sebagai unit container terkecil.

  • Jika permintaan pembuatan cluster Anda menyertakan kebijakan penskalaan otomatis, VM fleksibel dapat berasal dari kelompok VM yang berbeda, tetapi harus memiliki jumlah memori dan jumlah core yang sama.

  • Jenis mesin yang cocok dengan pemesanan akan dipilih terlebih dahulu dalam peringkat, diikuti dengan jenis VM dengan jumlah CPU terbesar.

  • Managed Service untuk Apache Spark menerapkan Google Cloud kuota pada penyediaan VM yang fleksibel.

  • Jika Anda mengupdate cluster yang dibuat menggunakan VM fleksibel, Managed Service untuk Apache Spark akan memilih dan menambahkan worker dari daftar VM fleksibel yang Anda berikan saat membuat cluster.

Cara meminta VM fleksibel

Anda dapat menentukan hingga lima daftar jenis VM berperingkat, dengan maksimal 10 jenis VM dalam daftar. Daftar dengan peringkat terendah memiliki prioritas tertinggi. Secara default, daftar VM fleksibel memiliki peringkat 0. Dalam daftar, Managed Service untuk Apache Spark memprioritaskan jenis VM dengan pemesanan yang tidak digunakan, diikuti dengan ukuran VM terbesar. Jenis VM dalam daftar dengan jumlah CPU yang sama akan diperlakukan sama.

Anda dapat meminta VM fleksibel saat membuat cluster Managed Service untuk Apache Spark menggunakan konsol Google Cloud , Google Cloud CLI, Dataproc API, Managed Service untuk Apache Airflow, atau Terraform.

Konsol

Untuk membuat cluster dengan VM fleksibel, lakukan hal berikut:

  1. Buka halaman Create cluster.
  2. Klik Additional configuration untuk meluaskan bagian tersebut.
  3. Edit Primary workers atau Secondary workers. Di bagian Add worker types, tentukan VM tambahan yang diberi peringkat.

gcloud

Gunakan perintah gcloud dataproc clusters create dengan flag master-instance-selection, worker-instance-selection, dan secondary-worker-instance-selection untuk menentukan daftar VM fleksibel berperingkat untuk worker master, utama, dan sekunder.

Contoh berikut meminta jenis VM master, utama, dan sekunder dengan prioritas berikut:

  • Sediakan VM e2-standard-8 jika tersedia (peringkat 0); jika mesin e2-standard-8 tidak tersedia, sediakan VM n2-standard-8 (peringkat 1).

Karena jenis worker sekunder tidak ditentukan, VM sekunder Spot preemptible akan disediakan.

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}'

Catatan:

  • --zone="": Menetapkan flag ini ke nilai kosong akan mengaktifkan penempatan zona otomatis, yang memungkinkan Managed Service untuk Apache Spark memilih zona yang memiliki jenis VM yang diminta dan tersedia untuk digunakan. Nilai flag ini menggantikan pemilihan zona yang ditentukan dalam gcloud config list default Anda.

API

Gunakan instanceFlexibilityPolicy.instanceSelectionList sebagai bagian dari permintaan clusters.create Dataproc API untuk menentukan daftar peringkat machineTypes untuk worker master, primer, dan sekunder.

Contoh: Cuplikan JSON berikut dari isi permintaan clusters.create menentukan jenis mesin master (masterConfig), worker utama (workerConfig), dan worker sekunder (secondaryWorkerConfig) dengan peringkat 0 dan peringkat 1.

{
  "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
          }
        ]
      }
    }
  }
}

Cloud Composer

Gunakan operator DataprocCreateClusterOperator dalam DAG Apache Airflow untuk menentukan instance_flexibility_policy untuk worker master, utama, dan sekunder:

from airflow import DAG
from airflow.models import Variable
from airflow.providers.google.cloud.operators.dataproc import (
    DataprocCreateClusterOperator,
)
from airflow.utils.dates import days_ago

PROJECT_ID = Variable.get("DATAPROC_PROJECT_ID")
REGION = Variable.get("DATAPROC_REGION")
CLUSTER_NAME = Variable.get("DATAPROC_CLUSTER_NAME")
NUM_WORKERS = int(Variable.get("DATAPROC_NUM_WORKERS"))
MIN_NUM_WORKERS = int(Variable.get("DATAPROC_MIN_NUM_WORKERS"))

FLEX_SELECTION_LIST = [
    {
        "machine_types": ["e2-standard-8"],
        "rank": 0,
    },
    {
        "machine_types": ["n2-standard-8"],
        "rank": 1,
    },
]

CLUSTER_CONFIG = {
    "gce_cluster_config": {
        "zone_uri": "",
    },
    "master_config": {
        "num_instances": 1,
        "instance_flexibility_policy": {
            "instance_selection_list": FLEX_SELECTION_LIST,
        },
    },
    "worker_config": {
        "num_instances": NUM_WORKERS,
        "min_num_instances": MIN_NUM_WORKERS,
        "instance_flexibility_policy": {
            "instance_selection_list": FLEX_SELECTION_LIST,
        },
    },
    "secondary_worker_config": {
        "num_instances": 4,
        "instance_flexibility_policy": {
            "instance_selection_list": FLEX_SELECTION_LIST,
        },
    },
}

with DAG(
    "dataproc_flexvm_dag",
    start_date=days_ago(1),
    schedule_interval=None,
    catchup=False,
) as dag:
    create_dataproc_cluster = DataprocCreateClusterOperator(
        task_id="create_dataproc_flexvm_cluster",
        project_id=PROJECT_ID,
        region=REGION,
        cluster_name=CLUSTER_NAME,
        cluster_config=CLUSTER_CONFIG,
    )

Terraform

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi penyedia Terraform.

Gunakan resource google_dataproc_cluster dengan blok instance_flexibility_policy untuk menentukan daftar VM fleksibel yang diberi peringkat:

variable "project_id" {
  type        = string
  description = "The Google Cloud project ID"
}

variable "region" {
  type        = string
  description = "The Google Cloud region for Dataproc deployment"
}

variable "cluster_name" {
  type        = string
  description = "Name of the Dataproc cluster"
}

variable "num_workers" {
  type        = number
  description = "Target number of primary workers"
}

variable "min_num_workers" {
  type        = number
  description = "Minimum primary workers for partial cluster creation"
}

resource "google_dataproc_cluster" "flex_cluster" {
  name    = var.cluster_name
  project = var.project_id
  region  = var.region

  cluster_config {
    gce_cluster_config {
      zone = ""
    }

    master_config {
      num_instances = 1
      instance_flexibility_policy {
        instance_selection_list {
          machine_types = ["e2-standard-8"]
          rank          = 0
        }
        instance_selection_list {
          machine_types = ["n2-standard-8"]
          rank          = 1
        }
      }
    }

    worker_config {
      num_instances     = var.num_workers
      min_num_instances = var.min_num_workers
      instance_flexibility_policy {
        instance_selection_list {
          machine_types = ["e2-standard-8"]
          rank          = 0
        }
        instance_selection_list {
          machine_types = ["n2-standard-8"]
          rank          = 1
        }
      }
    }

    secondary_worker_config {
      num_instances = 4
      instance_flexibility_policy {
        instance_selection_list {
          machine_types = ["e2-standard-8"]
          rank          = 0
        }
        instance_selection_list {
          machine_types = ["n2-standard-8"]
          rank          = 1
        }
      }
    }
  }
}

Penggantian disk

Anda dapat menentukan penggantian disk untuk setiap jenis mesin (pemilihan instance) dalam spesifikasi VM fleksibel. Hal ini memungkinkan Anda menyesuaikan boot disk, mengganti SSD lokal, dan memasang disk tambahan untuk jenis mesin tertentu.

Opsi dan aturan penggantian disk

Opsi konfigurasi penggantian disk:

  • Konfigurasi disk dasar: Konfigurasi disk yang ditentukan untuk node cluster, misalnya, menentukan ukuran boot disk untuk worker utama menggunakan flag --worker-boot-disk-size gcloud CLI atau kolom Dataproc API workerConfig.diskConfig.bootDiskSizeGb.
  • Penggantian disk pemilihan instance: Konfigurasi disk untuk jenis mesin yang ditentukan untuk node cluster.

Aturan konfigurasi penggantian disk:

  • Konfigurasi disk dasar: Jika tidak ada pilihan instance untuk node cluster yang menyertakan penggantian diskConfig, Anda dapat menentukan konfigurasi disk dasar untuk node tersebut. Konfigurasi disk dasar ini diterapkan ke semua pilihan instance untuk node.

  • Konfigurasi disk pemilihan instance: Jika pemilihan instance untuk node cluster menyertakan penggantian diskConfig, semua pemilihan instance dalam grup node harus menyertakan diskConfig (jika Anda juga menentukan konfigurasi disk dasar untuk node, error validasi akan terjadi).

  • Kompatibilitas jenis mesin: Semua jenis mesin dalam satu InstanceSelection harus kompatibel dengan diskConfig yang ditentukan. Misalnya, Anda tidak dapat mengelompokkan jenis mesin e2-standard-4, yang tidak mendukung hyperdisk, dengan jenis mesin n4-standard-4, yang memerlukan hyperdisk, dalam pilihan instance yang sama karena diskConfig tidak dapat memenuhi kedua jenis mesin tersebut.

  • Dukungan SSD lokal: Jika Anda mengonfigurasi SSD lokal (numLocalSsds > 0) dalam konfigurasi penggantian disk, semua jenis mesin dalam pilihan instance harus mendukung SSD lokal.

  • Kolom konfigurasi penggantian disk wajib:

    • Jika Anda menentukan diskConfig untuk pemilihan instance, bootDiskType wajib ada.
    • Jika Anda menentukan attachedDiskConfigs, type dan diskSizeGb wajib ada untuk setiap disk yang terpasang.

Contoh konfigurasi penggantian disk

Contoh berikut menentukan opsi konfigurasi penggantian disk berikut untuk node cluster berikut:

  • Node master: Menggunakan boot disk default.
  • Primary worker: Gunakan disk yang disesuaikan per pemilihan instance: misalnya, n4-standard-4 menggunakan hyperdisk-balanced, sedangkan n2-standard-4 menggunakan pd-standard.
  • Worker sekunder: Gunakan konfigurasi disk dasar kustom: pd-ssd dengan 200 GB, yang diterapkan ke semua pilihan instance.

gcloud YAML

Tentukan kebijakan VM fleksibel dalam file YAML untuk node master, primary worker, dan secondary worker:

  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:
          -   type: 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

Gunakan perintah gcloud dataproc clusters create untuk meneruskan file kebijakan:

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

JSON gcloud

Gunakan perintah gcloud dataproc clusters create dengan spesifikasi diskConfig JSON inline di --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":[{"type":"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

Gunakan kolom diskConfig dalam instanceFlexibilityPolicy.instanceSelectionList dalam permintaan clusters.create Dataproc API.

Contoh isi permintaan JSON:

{
  "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": [
                {
                  "type": "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
          }
        ]
      }
    }
  }
}

Mengganti properti VM Flex

Managed Service untuk Apache Spark menetapkan properti di level cluster. Saat membuat cluster yang menggunakan VM fleksibel, Anda dapat mengganti properti yang dihasilkan sistem untuk jenis VM Flex worker primer dan sekunder.

gcloud

Untuk mengganti properti saat Anda membuat cluster, gunakan flag --properties dengan sintaksis berikut:

--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
  • ROLE dapat berupa primary_worker atau secondary_worker.
  • Pisahkan beberapa properti dengan koma.

Perintah gcloud dataproc clusters create berikut mengganti jumlah vCPU yang dialokasikan YARN untuk NodeManager di worker sekunder. Contoh ini menetapkan nilai yarn.nodemanager.resource.cpu-vcores di yarn-site.xml ke 6 untuk semua VM worker sekunder e2-standard-8 dan n2-standard-8.

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

Untuk mengganti properti, tentukan properti tersebut di kolom properties pada objek SoftwareConfig dalam permintaan pembuatan cluster Anda.

Gunakan sintaksis berikut untuk kunci properti:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
  • ROLE dapat berupa primary_worker atau secondary_worker.

Objek SoftwareConfig berikut mengganti jumlah vCPU yang dialokasikan YARN untuk NodeManager di worker sekunder. Contoh ini menetapkan nilai yarn.nodemanager.resource.cpu-vcores ke 6 untuk semua e2-standard-8 dan n2-standard-8 worker VM sekunder.

{
  "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"
  }
}

Langkah berikutnya