VM Fleksibel adalah fitur Managed Service untuk Apache Spark yang memungkinkan Anda menentukan daftar jenis VM yang diprioritaskan untuk node master, primer, dan sekunder Managed Service untuk Apache Spark saat Anda membuat cluster Managed Service untuk Apache Spark.
Mengapa menggunakan VM fleksibel?
Masalah: Jika jenis VM tidak tersedia saat Anda mengirimkan permintaan pembuatan cluster, permintaan akan gagal, dan Anda perlu 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 ditentukan dengan ketersediaan jenis VM yang tercantum.
Batasan
- Cluster yang menggunakan VM fleksibel tidak dapat dihentikan.
- Node master di Cluster dengan ketersediaan tinggi tidak dapat menggunakan VM fleksibel, tetapi node pekerja 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 ditentukan sebelumnya dan kustom.
- Node master dan primary worker: Secara default, cluster Managed Service untuk Apache Spark memiliki satu node master dan dua node primary worker.
- Cluster ketersediaan tinggi (HA) memiliki tiga node master.
- Cluster satu node memiliki satu node yang bertindak sebagai node master dan worker.
- Cluster berskala nol memiliki node master dan hanya worker sekunder (tanpa worker primer).
- Node pekerja sekunder: Pekerja sekunder tidak menyimpan data dan hanya berfungsi sebagai node pemrosesan. Anda dapat menggunakan worker sekunder untuk menskalakan komputasi tanpa menskalakan penyimpanan. Jenis pekerja 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 image imageversions.- Mulai dari versi image
3.0, saat Anda membuat cluster tanpa menentukan jenis mesin untuk node cluster, Managed Service untuk Apache Spark akan menentukan node dengan daftar jenis mesin VM fleksibel yang diberi peringkat, seperti daftar jenis mesin seri N4, N2, dan E2 yang diberi peringkat, dengan daftar yang dioptimalkan untuk ketersediaan resource.
- Mulai dari versi image
Anda dapat menentukan hingga lima daftar jenis VM yang diberi peringkat, dengan maksimal 10 jenis VM dalam satu daftar.
Anda dapat menyertakan VM Fleksibel dalam template alur kerja untuk memberikan ketahanan terhadap tidak tersedianya 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 jenis mesin yang berbeda yang ditentukan untuk node cluster VM Fleksibel.
Meskipun Anda dapat menentukan rasio CPU ke memori yang berbeda untuk jenis worker VM primer dan sekunder dalam cluster, hal ini dapat menyebabkan penurunan performa karena rasio CPU ke 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 reservasi dipilih terlebih dahulu dalam peringkat, diikuti dengan jenis VM dengan jumlah CPU terbesar.
Managed Service untuk Apache Spark menerapkan Google Cloud kuota untuk penyediaan VM yang fleksibel.
Jika Anda memperbarui cluster yang dibuat menggunakan VM fleksibel, Managed Service untuk Apache Spark akan memilih dan menambahkan pekerja dari daftar VM fleksibel yang Anda berikan saat membuat cluster.
Cara meminta VM fleksibel
Anda dapat menentukan hingga lima daftar jenis VM yang diberi peringkat, dengan maksimal 10 jenis VM dalam satu daftar. Daftar yang memiliki 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 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:
- Buka halaman Buat cluster.
- Klik Konfigurasi tambahan untuk meluaskan bagian tersebut.
- Edit Pekerja primer atau Pekerja sekunder. Di bagian Tambahkan jenis pekerja, tentukan VM berperingkat tambahan.
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 yang diberi peringkat untuk pekerja master, primer, dan
sekunder.
Contoh berikut meminta jenis VM master, primer, dan sekunder dengan prioritas berikut:
- Sediakan VM
e2-standard-8jika tersedia (peringkat 0); jika mesine2-standard-8tidak tersedia, sediakan VMn2-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 tanda ini ke nilai kosong akan mengaktifkan penempatan zona otomatis, yang memungkinkan Managed Service untuk Apache Spark memilih zona yang memiliki jenis VM yang diminta tersedia untuk digunakan. Nilai tanda ini menggantikan pilihan zona yang ditentukan digcloud config listdefault Anda.
API
Gunakan instanceFlexibilityPolicy.instanceSelectionList
sebagai bagian dari permintaan
clusters.create
Dataproc API untuk menentukan daftar berperingkat
machineTypes
untuk master, pekerja utama, dan pekerja sekunder.
Contoh: Cuplikan JSON berikut dari clusters.create
isi permintaan
menentukan jenis mesin master (masterConfig), pekerja utama (workerConfig), dan pekerja 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
di DAG Apache Airflow untuk menentukan instance_flexibility_policy
untuk pekerja master, primer, 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 Anda. Hal ini memungkinkan Anda menyesuaikan disk booting, mengganti SSD lokal, dan melampirkan 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 primary worker menggunakan flag
gcloud CLI
--worker-boot-disk-sizeatau kolomworkerConfig.diskConfig.bootDiskSizeGbDataproc API. - Penggantian disk pemilihan instance: Konfigurasi disk untuk jenis mesin yang ditentukan untuk node cluster.
Aturan konfigurasi penggantian disk:
Konfigurasi disk dasar: Jika tidak ada pemilihan instance untuk node cluster yang menyertakan penggantian
diskConfig, Anda dapat menentukan konfigurasi disk dasar untuk node. 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 menyertakandiskConfig(jika Anda juga menentukan konfigurasi disk dasar untuk node, akan terjadi error validasi).Kompatibilitas jenis mesin: Semua jenis mesin dalam satu
InstanceSelectionharus kompatibel dengandiskConfigyang ditentukan. Misalnya, Anda tidak dapat mengelompokkan jenis mesine2-standard-4, yang tidak mendukung hyperdisk, dengan jenis mesinn4-standard-4, yang memerlukan hyperdisk, dalam pemilihan instance yang sama karenadiskConfigtidak dapat memenuhi kedua jenis mesin.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
diskConfiguntuk pilihan instance,bootDiskTypebersifat wajib. - Jika Anda menentukan
attachedDiskConfigs,typedandiskSizeGbwajib ada untuk setiap disk yang terpasang.
- Jika Anda menentukan
Contoh konfigurasi penggantian disk
Contoh berikut menentukan opsi konfigurasi penggantian disk berikut untuk node cluster berikut:
- Node master: Menggunakan boot disk default.
- Pekerja utama: Menggunakan disk yang disesuaikan per pilihan instance: misalnya,
n4-standard-4menggunakanhyperdisk-balanced, sedangkann2-standard-4menggunakanpd-standard. - Pekerja sekunder: Menggunakan konfigurasi disk dasar kustom:
pd-ssddengan200 GB, yang diterapkan ke semua pilihan instance.
gcloud YAML
Tentukan kebijakan VM fleksibel dalam file YAML untuk node master, primary worker, dan worker sekunder:
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: - type: 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
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 JSON diskConfig 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 di 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 Fleksibel
Managed Service untuk Apache Spark menetapkan properti di tingkat cluster. Saat membuat cluster yang menggunakan VM fleksibel, Anda dapat mengganti properti yang dibuat sistem untuk jenis VM Flex pekerja 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_workeratausecondary_worker. - Pisahkan beberapa properti dengan koma.
Perintah gcloud dataproc clusters create berikut menggantikan jumlah vCPU yang dialokasikan YARN untuk NodeManager pada worker sekunder. Contoh
ini menetapkan nilai yarn.nodemanager.resource.cpu-vcores di
yarn-site.xml ke 6 untuk semua VM pekerja 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 objek
SoftwareConfig
dalam permintaan pembuatan cluster Anda.
Gunakan sintaksis berikut untuk kunci properti:
ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
- ROLE dapat berupa
primary_workeratausecondary_worker.
Objek SoftwareConfig berikut menggantikan jumlah vCPU yang dialokasikan YARN untuk NodeManager pada pekerja sekunder. Contoh ini menetapkan nilai
yarn.nodemanager.resource.cpu-vcores ke 6 untuk semua VM worker sekunder e2-standard-8
dan n2-standard-8.
{
"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
- Pelajari lebih lanjut properti cluster Managed Service untuk Apache Spark.
- Pelajari cara membuat cluster Managed Service untuk Apache Spark.