Questa pagina spiega come attivare la pianificazione flessibile delle risorse (FlexRS) per le pipeline batch con scalabilità automatica in Dataflow.
FlexRS riduce i costi di elaborazione batch grazie a tecniche di pianificazione avanzate, al servizio Dataflow Shuffle e a una combinazione di istanze di macchine virtuali (VM) prerilasciabili e VM normali. Eseguendo in parallelo VM prerilasciabili e VM normali, Dataflow migliora l'esperienza utente quando Compute Engine interrompe le istanze VM prerilasciabile durante un evento di sistema. FlexRS contribuisce a garantire che la pipeline continui a progredire e che non perda il lavoro precedente quando Compute Engine prerilascia le VM prerilasciabili.
I job con FlexRS utilizzano Dataflow Shuffle basato su servizi per l'unione e il raggruppamento. Di conseguenza, i job FlexRS non utilizzano le risorse di Persistent Disk per memorizzare i risultati dei calcoli temporanei. L'utilizzo di Dataflow Shuffle consente a FlexRS di gestire meglio la preemption di una VM worker, perché il servizio Dataflow non deve ridistribuire i dati agli altri worker. Ogni worker Dataflow ha comunque bisogno di un piccolo volume su Persistent Disk di 25 GB per archiviare l'immagine macchina e i log temporanei.
Supporto e limitazioni
- Supporta le pipeline batch.
- Richiede l'SDK Apache Beam per Java 2.12.0 o versioni successive, l'SDK Apache Beam per Python 2.12.0 o versioni successive o l'SDK Apache Beam per Go.
- Utilizza Dataflow Shuffle. L'attivazione di FlexRS attiva automaticamente la funzionalità Dataflow Shuffle.
- Non supporta le GPU.
- Non supporta le prenotazioni di Compute Engine.
- I job FlexRS hanno un ritardo nella pianificazione. Pertanto, FlexRS è più adatto per i carichi di lavoro che non sono critici in termini di tempo, ad esempio i job giornalieri o settimanali che possono essere completati in un determinato intervallo di tempo.
Pianificazione ritardata
Quando invii un job FlexRS, il servizio Dataflow lo inserisce in una coda e lo invia per l'esecuzione entro sei ore dalla sua creazione. Dataflow trova il momento migliore per avviare il job in quella finestra temporale, in base alla capacità disponibile e ad altri fattori.
Quando invii un job FlexRS, il servizio Dataflow esegue i seguenti passaggi:
- Restituisce un ID job immediatamente dopo l'invio del job.
- Esegue un'esecuzione di convalida anticipata.
Utilizza il risultato della convalida anticipata per determinare il passaggio successivo.
- In caso di esito positivo, mette in coda il job in attesa del lancio con ritardo.
- In tutti gli altri casi, il job non va a buon fine e il servizio Dataflow segnala gli errori.
Se la convalida va a buon fine, nell'interfaccia di monitoraggio di Dataflow il job mostra un ID e lo
stato
Queued
. Se la convalida non va a buon fine, il job mostra lo stato Failed
.
Convalida anticipata
I job FlexRS non vengono avviati immediatamente dopo l'invio. Durante la convalida iniziale, il servizio Dataflow verifica i parametri di esecuzione e le impostazioni dell'ambiente Google Cloud, ad esempio i ruoli IAM e le configurazioni di rete. Dataflow convalida il job il più possibile al momento dell'invio e segnala potenziali errori. Questa procedura di convalida anticipata non prevede costi.
Il passaggio di convalida anticipata non esegue il codice utente. Devi verificare il codice per controllare la presenza di problemi utilizzando il runner diretto di Apache Beam o i job non FlexRS. Se si verificano modifiche all'ambiente Google Cloud tra la creazione del job e la pianificazione ritardata del job, il job potrebbe riuscire durante la convalida iniziale, ma non al momento del lancio.
Attiva FlexRS
Quando crei un job FlexRS, viene utilizzata una quota di job simultanei, anche quando il job è nello stato In coda. La procedura di convalida anticipata non verifica né riserva altre quote. Pertanto, prima di attivare FlexRS, verifica di disporre di quote di risorse del progetto Google Cloud sufficienti per lanciare il tuo job. Sono incluse le quote aggiuntive per CPU preemptibili, CPU regolari e indirizzi IP, a meno che non disattivi il parametro indirizzo IP pubblico.
Se non disponi di una quota sufficiente, il tuo account potrebbe non avere risorse sufficienti al momento del deployment del job FlexRS. Per impostazione predefinita, Dataflow seleziona le VM prerilasciabili per il 90% di worker nel pool di worker. Quando pianifichi la quota CPU, assicurati di disporre di una quota VM preassegnata sufficiente. Puoi richiedere esplicitamente VM prerilasciabile prerilasciabili; in caso contrario, il tuo job FlexRS non avrà le risorse necessarie per l'esecuzione in modo tempestivo.
Prezzi
Per i job FlexRS vengono fatturate le seguenti risorse:
- CPU regolari e prerilasciabili
- Risorse di memoria
- Risorse di Dataflow Shuffle
- 25 GB per worker di risorse su Persistent Disk
Sebbene Dataflow utilizzi sia worker prerilasciabili che normali per eseguire il job FlexRS, ti viene addebitata una tariffa uniforme scontata rispetto ai normali prezzi di Dataflow, a prescindere dal tipo di worker. Le risorse Dataflow Shuffle e Persistent Disk non sono scontate.
Per ulteriori informazioni, consulta la pagina Dettagli dei prezzi di Dataflow.
Opzioni pipeline
Java
Per attivare un job FlexRS, utilizza la seguente opzione di pipeline:
--flexRSGoal=COST_OPTIMIZED
, dove l'obiettivo di ottimizzazione dei costi indica che il servizio Dataflow sceglie le risorse scontate disponibili.--flexRSGoal=SPEED_OPTIMIZED
, dove viene ottimizzata per un tempo di esecuzione inferiore. Se non specificato, il campo--flexRSGoal
ha per impostazione predefinita il valoreSPEED_OPTIMIZED
, che equivale a omettere questo flag.
I job FlexRS influiscono sui seguenti parametri di esecuzione:
numWorkers
imposta solo il numero iniziale di worker. Tuttavia, puoi impostaremaxNumWorkers
per motivi di controllo dei costi.- Non puoi utilizzare l'opzione
autoscalingAlgorithm
con i job FlexRS. - Non puoi specificare il flag
zone
per i job FlexRS. Il servizio Dataflow seleziona la zona per tutti i job FlexRS nella regione specificata con il parametroregion
. - Devi selezionare una posizione del flusso di dati come
region
. - Non puoi utilizzare le serie di macchine M2, M3 o H3 per il tuo
workerMachineType
.
Il seguente esempio mostra come aggiungere parametri ai parametri della pipeline normale per utilizzare FlexRS:
--flexRSGoal=COST_OPTIMIZED \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16
Se ometti region
, maxNumWorkers
e workerMachineType
, il servizio Dataflow determina il valore predefinito.
Python
Per attivare un job FlexRS, utilizza la seguente opzione di pipeline:
--flexrs_goal=COST_OPTIMIZED
, dove l'obiettivo di ottimizzazione dei costi indica che il servizio Dataflow sceglie le risorse scontate disponibili.--flexrs_goal=SPEED_OPTIMIZED
, dove viene ottimizzata per un tempo di esecuzione inferiore. Se non specificato, il campo--flexrs_goal
ha per impostazione predefinita il valoreSPEED_OPTIMIZED
, che equivale a omettere questo flag.
I job FlexRS influiscono sui seguenti parametri di esecuzione:
num_workers
imposta solo il numero iniziale di worker. Tuttavia, puoi impostaremax_num_workers
per motivi di controllo dei costi.- Non puoi utilizzare l'opzione
autoscalingAlgorithm
con i job FlexRS. - Non puoi specificare il flag
zone
per i job FlexRS. Il servizio Dataflow seleziona la zona per tutti i job FlexRS nella regione specificata con il parametroregion
. - Devi selezionare una posizione del flusso di dati come
region
. - Non puoi utilizzare le serie di macchine M2, M3 o H3 per il tuo
machine_type
.
Il seguente esempio mostra come aggiungere parametri ai parametri della pipeline normale per utilizzare FlexRS:
--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16
Se ometti region
, max_num_workers
e machine_type
, il servizio Dataflow determina il valore predefinito.
Vai
Per attivare un job FlexRS, utilizza la seguente opzione di pipeline:
--flexrs_goal=COST_OPTIMIZED
, dove l'obiettivo di ottimizzazione dei costi indica che il servizio Dataflow sceglie le risorse scontate disponibili.--flexrs_goal=SPEED_OPTIMIZED
, dove viene ottimizzata per un tempo di esecuzione inferiore. Se non specificato, il campo--flexrs_goal
ha per impostazione predefinita il valoreSPEED_OPTIMIZED
, che equivale a omettere questo flag.
I job FlexRS influiscono sui seguenti parametri di esecuzione:
num_workers
imposta solo il numero iniziale di worker. Tuttavia, puoi impostaremax_num_workers
per motivi di controllo dei costi.- Non puoi utilizzare l'opzione
autoscalingAlgorithm
con i job FlexRS. - Non puoi specificare il flag
zone
per i job FlexRS. Il servizio Dataflow seleziona la zona per tutti i job FlexRS nella regione specificata con il parametroregion
. - Devi selezionare una posizione del flusso di dati come
region
. - Non puoi utilizzare le serie di macchine M2, M3 o H3 per il tuo
worker_machine_type
.
Il seguente esempio mostra come aggiungere parametri ai parametri della pipeline normale per utilizzare FlexRS:
--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16
Se ometti region
, max_num_workers
e machine_type
, il servizio Dataflow determina il valore predefinito.
Modelli Dataflow
Alcuni modelli di Dataflow non supportano l'opzione della pipeline FlexRS. In alternativa, utilizza la seguente opzione di pipeline.
--additional-experiments=flexible_resource_scheduling,shuffle_mode=service,delayed_launch
Monitora i job FlexRS
Puoi monitorare lo stato del job FlexRS nella console Google Cloud in due modi:
- La pagina Job che mostra tutti i tuoi job.
- La pagina Interfaccia di monitoraggio del job che hai inviato.
Nella pagina Job, i job non avviati mostrano lo stato In coda.
Nella pagina Interfaccia di monitoraggio, i job in attesa nella coda mostrano il messaggio "Il grafico verrà visualizzato dopo l'avvio di un job" nella scheda Grafico del job.