Le VM flessibili sono una funzionalità di Managed Service for Apache Spark che consente di specificare elenchi di tipi di VM con priorità per i nodi master, worker primari e 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 "migliore successivo". Questa procedura di nuova richiesta può comportare più iterazioni finché non specifichi un tipo di VM disponibile.
La soluzione: la funzionalità VM flessibili di Managed Service for Apache Spark consente di completare la richiesta di creazione del cluster selezionando i tipi di VM master, VM worker primari e VM worker secondari dagli elenchi di VM classificati e 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 HA possono utilizzare VM flessibili.
Terminologia
- Tipo di VM: la famiglia, la capacità di memoria e il numero di core 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 solo un nodo master e worker secondari (nessun worker primario).
- Nodi worker secondari: i worker secondari non archiviano i dati e funzionano solo come nodi di elaborazione. Puoi utilizzare i worker secondari per scalare il calcolo senza scalare lo spazio di archiviazione. Il tipo di worker secondario VM flessibile predefinito è una VM spot, che è un tipo prerilasciabile.
Utilizzo
- Le VM flessibili sono disponibili in Managed Service for Apache Spark on
Managed Service for Apache Spark
2.0.74+,2.1.76+,2.2.42+, and later imageversions.- 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 le VM flessibili nei modelli di flusso di lavoro per fornire resilienza alla mancata disponibilità delle risorse quando i cluster vengono creati dal modello.
Consiglio: 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 solo tipo di disco. Puoi utilizzare gli override dei dischi per specificare tipi di dischi diversi per i diversi tipi di macchine specificati per un nodo del cluster VM flessibile.
Sebbene tu possa specificare rapporti CPU-memoria diversi per i tipi di VM worker primari e secondari in un cluster, ciò può comportare 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 provenire da 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 una classifica, seguiti dai tipi di VM con il maggior numero di CPU.
Managed Service for Apache Spark applica Google Cloud le quote al provisioning delle VM flessibili.
Se aggiorni un cluster creato utilizzando VM flessibili, Managed Service for Apache Spark seleziona e aggiunge i worker dagli elenchi di VM flessibili forniti 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 la classifica più bassa hanno la priorità più alta. Per impostazione predefinita, gli elenchi di VM flessibili hanno una classifica pari a 0. All'interno di un elenco, Managed Service for Apache Spark assegna la priorità ai tipi di VM con prenotazioni inutilizzate, seguite 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 Google Cloud console, Google Cloud CLI, l'API Dataproc, Managed Service for Apache Airflow o Terraform.
Console
Per creare un cluster con VM flessibili:
- Apri la pagina Crea cluster.
- Fai clic su Configurazione aggiuntiva per espandere la sezione.
- Modifica Worker primari o Worker secondari. In Aggiungi tipi di worker, specifica altre VM classificate.
gcloud
Utilizza il
gcloud dataproc clusters create
comando con master-instance-selection, worker-instance-selection e
secondary-worker-instance-selection
flag per specificare gli elenchi di VM flessibili classificati per i worker master, primari e
secondari.
L'esempio seguente richiede i tipi di VM master, primari e secondari con le seguenti priorità:
- Esegui il provisioning delle VM
e2-standard-8se disponibili (classifica 0); se le macchinee2-standard-8non sono disponibili, esegui il provisioning delle VMn2-standard-8(classifica 1).
Poiché il tipo di worker secondario non è specificato, verrà eseguito il provisioning delle VM secondarie spot prerilasciabili.
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 i tipi di VM richiesti sono disponibili per l'uso. Il valore di questo flag esegue l'override di qualsiasi selezione di zona specificata ingcloud config listpredefinita.
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 clusters.create
corpo della richiesta
specifica i tipi di macchine master (masterConfig), worker primari (workerConfig) e worker secondari
(secondaryWorkerConfig) con le classifiche 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'
DataprocCreateClusterOperator
operatore in un DAG di 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
google_dataproc_cluster
risorsa con instance_flexibility_policy blocchi per specificare gli 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 dischi
Puoi specificare gli override dei dischi 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 degli SSD locali e collegare dischi aggiuntivi per tipi di macchine specifici.
Opzioni e regole 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 la specifica di 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 dell'istanza: 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 dell'istanza per un nodo del cluster include un override
diskConfig, puoi definire una configurazione del disco di base per il nodo. Questa configurazione del disco di base viene applicata a tutte le selezioni dell'istanza per il nodo.Configurazioni dei dischi di selezione dell'istanza: se una selezione dell'istanza per un nodo del cluster include un override
diskConfig, tutte le selezioni dell'istanza 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 macchine: tutti i tipi di macchine 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 dell'istanza perchédiskConfignon può soddisfare entrambi i tipi di macchine.Supporto SSD locale: se configuri gli SSD locali (
numLocalSsds> 0) in una configurazione di override dei dischi, tutti i tipi di macchine nella selezione dell'istanza devono supportare gli SSD locali.Campi di configurazione dell'override dei dischi obbligatori:
- Se definisci
diskConfigper una selezione dell'istanza,bootDiskTypeè obbligatorio. - Se definisci
attachedDiskConfigs, siatypesiadiskSizeGbsono obbligatori per ogni disco collegato.
- Se definisci
Esempi di configurazione dell'override dei dischi
L'esempio seguente specifica le seguenti opzioni di configurazione dell'override dei dischi per i seguenti nodi del cluster:
- Nodi master: utilizza i dischi di avvio predefiniti.
- Worker primari: utilizza dischi personalizzati per selezione dell'istanza: ad esempio,
n4-standard-4utilizzahyperdisk-balanced, mentren2-standard-4utilizzapd-standard. - Worker secondari: utilizza una configurazione del disco di base personalizzata:
pd-ssdcon200 GB, applicata a tutte le selezioni dell'istanza.
gcloud YAML
Definisci le policy delle VM flessibili nei file YAML per i nodi master, worker primari e worker secondari:
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 gcloud dataproc clusters create
comando 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
gcloud JSON
Utilizza il gcloud dataproc clusters create
comando con le specifiche diskConfig JSON 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
}
]
}
}
}
}
Eseguire 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 worker primari e secondari.
gcloud
Per eseguire l'override delle proprietà durante la creazione di 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 che YARN alloca 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'
SoftwareConfig
oggetto 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à dei cluster Managed Service for Apache Spark.
- Scopri come creare un cluster Managed Service for Apache Spark.