Le VM flessibili sono una funzionalità di Managed Service for Apache Spark che consente di specificare elenchi con priorità di tipi di VM per i nodi master, i nodi worker primari e i nodi worker secondari di Managed Service for Apache Spark quando crei un cluster Managed Service for Apache Spark.
Perché utilizzare le VM flessibili?
Il problema: se un tipo di VM non è disponibile quando invii una richiesta di creazione del cluster, la richiesta non va a buon fine e devi aggiornare la richiesta, lo script o il codice per specificare un tipo di VM "alternativo". Questo processo di nuova richiesta può comportare più iterazioni fino a quando non specifichi un tipo di VM disponibile.
La soluzione: la funzionalità VM flessibile di Managed Service for Apache Spark aiuta a soddisfare la richiesta di creazione del cluster selezionando i tipi di VM worker master, primari e secondari dagli elenchi di VM classificati, quindi cercando le zone all'interno della regione del cluster specificata con la disponibilità dei tipi di VM elencati.
Limitazioni
- I cluster che utilizzano VM flessibili non possono essere arrestati.
- I nodi master nei cluster ad alta affidabilità non possono utilizzare VM flessibili, ma i nodi worker dei cluster ad alta affidabilità possono utilizzare VM flessibili.
Terminologia
- Tipo di VM: la famiglia, la capacità di memoria e il numero di core della CPU di un'istanza VM. Managed Service for Apache Spark supporta l'utilizzo di tipi di VM predefiniti e personalizzati.
- Nodi master e worker primari:per impostazione predefinita, un cluster Managed Service for Apache Spark ha un nodo master e due nodi worker primari.
- Un cluster ad alta affidabilità (HA) ha tre nodi master.
- Un cluster a nodo singolo ha un nodo che funge da nodo master e nodo worker.
- Un cluster con scalabilità zero ha un nodo master e solo worker secondari (nessun worker primario).
- Nodi worker secondari: i worker secondari non archiviano dati e fungono solo da nodi di elaborazione. Puoi utilizzare i worker secondari per scalare il computing senza scalare lo spazio di archiviazione. Il tipo di worker secondario delle VM flessibili predefinito è una VM spot, che è un tipo preemptible.
Utilizzo
- Le VM flessibili sono disponibili in Managed Service for Apache Spark nelle imageversions
2.0.74+,2.1.76+,2.2.42+e successive di Managed Service for Apache Spark.- A partire dalla versione immagine
3.0, quando crei un cluster senza specificare un tipo di macchina per un nodo del cluster, Managed Service for Apache Spark specifica il nodo con un elenco classificato di tipi di macchine VM flessibili, ad esempio un elenco classificato di tipi di macchine delle serie N4, N2 ed E2, con l'elenco ottimizzato per la disponibilità delle risorse.
- A partire dalla versione immagine
Puoi specificare fino a cinque elenchi di tipi di VM classificati, con un massimo di 10 tipi di VM in un elenco.
Puoi includere VM flessibili nei modelli di workflow per garantire la resilienza in caso di indisponibilità delle risorse quando i cluster vengono creati dal modello.
Suggerimento: attiva il posizionamento automatico delle zone di Managed Service for Apache Spark, che consente a Managed Service for Apache Spark di scegliere una zona con la capacità di eseguire il provisioning delle VM richieste.
Per impostazione predefinita, un nodo del cluster deve utilizzare un tipo di disco. Puoi utilizzare gli override del disco per specificare tipi di disco diversi per i diversi tipi di macchina specificati per un nodo del cluster di VM Flex.
Sebbene sia possibile specificare rapporti CPU/memoria diversi per i tipi di VM worker principali e secondari in un cluster, ciò può causare un peggioramento delle prestazioni perché il rapporto CPU/memoria più piccolo viene utilizzato come unità container più piccola.
Se la richiesta di creazione del cluster include una policy di scalabilità automatica, le VM flessibili possono appartenere a famiglie di VM diverse, ma devono avere la stessa quantità di memoria e lo stesso numero di core.
I tipi di macchine che corrispondono alle prenotazioni vengono selezionati per primi all'interno di un ranking, seguiti dai tipi di VM con il maggior numero di CPU.
Managed Service for Apache Spark applica Google Cloud quote al provisioning flessibile delle VM.
Se aggiorni un cluster creato utilizzando VM flessibili, Managed Service for Apache Spark seleziona e aggiunge worker dagli elenchi di VM flessibili che hai fornito durante la creazione del cluster.
Come richiedere VM flessibili
Puoi specificare fino a cinque elenchi di tipi di VM classificati, con un massimo di 10 tipi di VM in un elenco. Gli elenchi con il ranking più basso hanno la priorità più alta. Per impostazione predefinita, gli elenchi di VM flessibili hanno un ranking pari a 0. All'interno di un elenco, Managed Service for Apache Spark dà la priorità ai tipi di VM con prenotazioni inutilizzate, seguiti dalle dimensioni delle VM più grandi. I tipi di VM all'interno di un elenco con lo stesso numero di CPU vengono trattati allo stesso modo.
Puoi richiedere VM flessibili quando crei un cluster Managed Service for Apache Spark utilizzando la console Google Cloud , Google Cloud CLI, l'API Dataproc, Managed Service for Apache Airflow o Terraform.
Console
Per creare un cluster con VM flessibili, segui questi passaggi:
- Apri la pagina Crea cluster.
- Fai clic su Configurazione aggiuntiva per espandere la sezione.
- Modifica i worker primari o i worker secondari. In Aggiungi tipi di worker, specifica altre VM classificate.
gcloud
Utilizza il
comando gcloud dataproc clusters create
con i flag master-instance-selection, worker-instance-selection e
secondary-worker-instance-selection
per specificare elenchi di VM flessibili classificati per i worker master, primari e
secondari.
L'esempio seguente richiede tipi di VM master, primarie e secondarie con le seguenti priorità:
- Esegui il provisioning di VM
e2-standard-8, se disponibili (ranking 0); se le macchinee2-standard-8non sono disponibili, esegui il provisioning di VMn2-standard-8(ranking 1).
Poiché il tipo di worker secondario non è specificato, verrà eseguito il provisioning delle VM secondarie Spot preemptible.
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}'
Note:
--zone="": l'impostazione di questo flag su un valore vuoto attiva il posizionamento automatico delle zone, che consente a Managed Service for Apache Spark di scegliere una zona in cui sono disponibili i tipi di VM richiesti. Questo valore del flag sostituisce qualsiasi selezione della zona specificata nelgcloud config listpredefinito.
API
Utilizza instanceFlexibilityPolicy.instanceSelectionList
come parte di una richiesta
clusters.create
dell'API Dataproc per specificare un elenco classificato di
machineTypes
per i worker master, primari e secondari.
Esempio: il seguente snippet JSON di un corpo della richiesta clusters.create specifica i tipi di macchina master (masterConfig), worker primario (workerConfig) e worker secondario (secondaryWorkerConfig) con i rank 0 e 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
Utilizza l'operatore DataprocCreateClusterOperator in un DAG Apache Airflow per specificare instance_flexibility_policy per i worker master, primari e secondari:
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
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base. Per saperne di più, consulta la documentazione di riferimento del fornitore Terraform.
Utilizza la risorsa google_dataproc_cluster con i blocchi instance_flexibility_policy per specificare elenchi di VM flessibili classificati:
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
}
}
}
}
}
Override dei dischi
Puoi specificare gli override del disco per ogni tipo di macchina (selezione dell'istanza) nella specifica della VM flessibile. In questo modo puoi personalizzare i dischi di avvio, eseguire l'override delle unità SSD locali e collegare dischi aggiuntivi per tipi di macchine specifici.
Regole e opzioni di override dei dischi
Opzioni di configurazione dell'override dei dischi:
- Configurazione del disco di base: una configurazione del disco specificata per un nodo del cluster, ad esempio specificando una dimensione del disco di avvio per i worker primari utilizzando il flag
--worker-boot-disk-sizedi gcloud CLI o il campoworkerConfig.diskConfig.bootDiskSizeGbdell'API Dataproc. - Override dei dischi di selezione delle istanze:configurazioni dei dischi per i tipi di macchine specificati per un nodo del cluster.
Regole di configurazione dell'override dei dischi:
Configurazione del disco di base: se nessuna selezione di istanze per un nodo del cluster include un override di
diskConfig, puoi definire una configurazione del disco di base per il nodo. Questa configurazione del disco di base viene applicata a tutte le selezioni di istanze per il nodo.Configurazioni dei dischi per la selezione delle istanze: se una selezione delle istanze per un nodo del cluster include un override di
diskConfig, tutte le selezioni delle istanze nel gruppo di nodi devono includere undiskConfig(se definisci anche una configurazione del disco di base per il nodo, si verifica un errore di convalida).Compatibilità dei tipi di macchina: tutti i tipi di macchina all'interno di un singolo
InstanceSelectiondevono essere compatibili con ildiskConfigspecificato. Ad esempio, non puoi raggruppare un tipo di macchinae2-standard-4, che non supporta un Hyperdisk, con un tipo di macchinan4-standard-4, che richiede un Hyperdisk, nella stessa selezione di istanze, poichédiskConfignon può soddisfare entrambi i tipi di macchine.Supporto di SSD locali: se configuri SSD locali (
numLocalSsds> 0) in una configurazione di override dei dischi, tutti i tipi di macchine nella selezione delle istanze devono supportare gli SSD locali.Campi di configurazione obbligatori per l'override del disco:
- Se definisci
diskConfigper una selezione di istanze,bootDiskTypeè obbligatorio. - Se definisci
attachedDiskConfigs, siatypechediskSizeGbsono obbligatori per ogni disco collegato.
- Se definisci
Esempi di configurazione dell'override dei dischi
L'esempio seguente specifica le seguenti opzioni di configurazione di override del disco per i seguenti nodi del cluster:
- Nodi master: utilizza i dischi di avvio predefiniti.
- Worker primari: utilizza dischi personalizzati per la selezione delle istanze: ad esempio
n4-standard-4utilizzahyperdisk-balanced, mentren2-standard-4utilizzapd-standard. - Worker secondari: utilizza una configurazione del disco di base personalizzata:
pd-ssdcon200 GB, che viene applicata a tutte le selezioni di istanze.
gcloud YAML
Definisci le policy delle VM flessibili nei file YAML per i nodi master, worker primario e worker secondario:
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
Utilizza il comando gcloud dataproc clusters create per passare i file delle policy:
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
Utilizza il comando gcloud dataproc clusters create con le specifiche JSON diskConfig in linea 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":[{"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
Utilizza il campo diskConfig all'interno di un
instanceFlexibilityPolicy.instanceSelectionList in una richiesta
clusters.create dell'API Dataproc.
Esempio di corpo della richiesta 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
}
]
}
}
}
}
Esegui l'override delle proprietà delle VM flessibili
Managed Service for Apache Spark imposta le proprietà a livello di cluster. Quando crei un cluster che utilizza VM flessibili, puoi eseguire l'override delle proprietà generate dal sistema per i tipi di VM flessibili dei worker principali e secondari.
gcloud
Per eseguire l'override delle proprietà quando crei un cluster, utilizza il flag --properties con la seguente sintassi:
--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
- ROLE può essere
primary_workerosecondary_worker. - Separa più proprietà con una virgola.
Il seguente comando gcloud dataproc clusters create esegue l'override del numero di vCPU allocate da YARN per NodeManager sui worker secondari. Questo esempio imposta il valore yarn.nodemanager.resource.cpu-vcores in yarn-site.xml su 6 per tutte le VM worker secondarie e2-standard-8 e 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
Per eseguire l'override delle proprietà, definiscile nel campo properties dell'oggetto SoftwareConfig nella richiesta di creazione del cluster.
Utilizza la seguente sintassi per la chiave della proprietà:
ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
- ROLE può essere
primary_workerosecondary_worker.
Il seguente oggetto SoftwareConfig esegue l'override del numero di vCPU che YARN alloca per NodeManager sui worker secondari. Questo esempio imposta il valore yarn.nodemanager.resource.cpu-vcores su 6 per tutte le VM worker secondarie e2-standard-8 e 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"
}
}
Passaggi successivi
- Scopri di più sulle proprietà del cluster Managed Service for Apache Spark.
- Scopri come creare un cluster Managed Service for Apache Spark.