Utilizza la pianificazione flessibile delle risorse in Cloud Dataflow

Questa pagina spiega come abilitare la pianificazione delle risorse flessibili (FlexRS) per le pipeline batch con scalabilità automatica in Dataflow.

FlexRS riduce i costi di elaborazione batch utilizzando tecniche di pianificazione avanzate, il servizio Dataflow Shuffle e una combinazione di istanze di macchine virtuali (VM) prerilasciabili e VM normali. Eseguendo VM prerilasciabili e VM normali in parallelo, Dataflow migliora l'esperienza utente quando Compute Engine interrompe le istanze VM prerilasciabile durante un evento di sistema. FlexRS garantisce che la pipeline continui a progredire e che non perderai il lavoro precedente quando Compute Engine prerilascia le VM prerilasciabili.

I job con FlexRS utilizzano Dataflow Shuffle basato su servizio per il join e il raggruppamento. Di conseguenza, i job FlexRS non utilizzano le risorse del Persistent Disk per l'archiviazione dei risultati temporanei dei calcoli. L'utilizzo di Dataflow Shuffle consente a FlexRS di gestire meglio il prerilascio di una VM worker, poiché il servizio Dataflow non deve ridistribuire i dati tra i worker rimanenti. Ogni worker Dataflow ha comunque bisogno di un piccolo volume di Persistent Disk da 25 GB per archiviare l'immagine della macchina e i log temporanei.

Supporto e limitazioni

  • Supporta pipeline in modalità 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 oppure l'SDK Apache Beam per Go.
  • Utilizza Dataflow Shuffle. L'attivazione di FlexRS abilita automaticamente Dataflow Shuffle.
  • Non supporta le GPU.
  • I job FlexRS hanno un ritardo nella pianificazione. Pertanto, FlexRS è più adatto per carichi di lavoro non critici in termini di tempo, come job giornalieri o settimanali che possono essere completati entro un determinato periodo di tempo.

Programmazione posticipata

Quando invii un job FlexRS, il servizio Dataflow inserisce il job in una coda e lo invia per l'esecuzione entro sei ore dalla creazione del job. Dataflow trova il momento migliore per avviare il job entro quell'intervallo di tempo, in base alla capacità disponibile e ad altri fattori.

Quando invii un job FlexRS, il servizio Dataflow esegue i seguenti passaggi:

  1. Restituisce un ID job subito dopo l'invio del job.
  2. Esegue un'esecuzione di convalida anticipata.
  3. Utilizza il risultato della convalida anticipata per determinare il passaggio successivo.

    1. Se l'operazione riesce, il job viene messo in coda in attesa del lancio ritardato.
    2. In tutti gli altri casi, il job non riesce e il servizio Dataflow segnala gli errori.

Se la convalida ha esito positivo, nell'interfaccia di monitoraggio di Dataflow, il job visualizza un ID e lo stato Queued. Se la convalida non va a buon fine, il job visualizza lo stato Failed.

Convalida anticipata

I job FlexRS non vengono avviati immediatamente al momento dell'invio. Durante la convalida anticipata, il servizio Dataflow verifica i parametri di esecuzione e le impostazioni dell'ambiente Google Cloud, come i ruoli IAM e le configurazioni di rete. Dataflow convalida il job il più possibile al momento dell'invio del job e segnala potenziali errori. Questo processo di convalida anticipata non ti viene addebitato.

Il passaggio di convalida iniziale non esegue il codice utente. Devi verificare il codice per verificare la presenza di problemi utilizzando i job Apache Beam Direct Runner o non-FlexRS. Se si verificano cambiamenti nell'ambiente Google Cloud tra la creazione del job e la pianificazione ritardata del job, quest'ultimo potrebbe avere esito positivo durante la convalida anticipata, ma comunque non riuscire al momento del lancio.

Abilita FlexRS

Quando crei un job FlexRS, viene utilizzata una quota per i job simultanei, anche quando il job è in stato In coda. Il processo di convalida anticipata non verifica né riserva altre quote. Pertanto, prima di abilitare FlexRS, verifica di avere un numero sufficiente di quotas delle risorse del progetto Google Cloud per avviare il job. che include una quota aggiuntiva per le CPU prerilasciabili, le CPU normali e gli indirizzi IP, a meno che non disattivi il parametro IP pubblico.

Se non disponi di una quota sufficiente, il tuo account potrebbe non avere risorse sufficienti quando viene eseguito il deployment del job FlexRS. Dataflow seleziona per impostazione predefinita VM prerilasciabili per il 90% dei worker nel pool di worker. Quando pianifichi la quota per le CPU, assicurati di disporre di una quota VM prerilasciabili sufficiente. Puoi richiedere esplicitamente una quota VM prerilasciabile prerilasciabile, altrimenti il tuo job FlexRS non avrà le risorse per essere eseguito in modo tempestivo.

Prezzi

I job FlexRS vengono fatturati per le seguenti risorse:

  • CPU normali e prerilasciabili
  • Risorse di memoria
  • Risorse Dataflow Shuffle
  • 25 GB per worker di risorse Persistent Disk

Mentre Dataflow utilizza worker prerilasciabili e normali per eseguire il tuo job FlexRS, ti viene addebitata una tariffa scontata uniforme rispetto ai normali prezzi di Dataflow indipendentemente 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 abilitare 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 qualsiasi risorsa scontata disponibile.

  • --flexRSGoal=SPEED_OPTIMIZED, in cui viene ottimizzato per ridurre i tempi di esecuzione. Se non specificato, il campo --flexRSGoal viene impostato sul valore predefinito SPEED_OPTIMIZED, che equivale all'omissione di questo flag.

I job FlexRS influiscono sui seguenti parametri di esecuzione:

  • numWorkers imposta solo il numero iniziale di worker. Tuttavia, puoi impostare maxNumWorkers per motivi legati al 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 parametro region.
  • Devi selezionare una località Dataflow come region.
  • Non puoi utilizzare la serie di macchine M2, M3 o H3 per workerMachineType.

L'esempio seguente 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 abilitare 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 qualsiasi risorsa scontata disponibile.

  • --flexrs_goal=SPEED_OPTIMIZED, in cui viene ottimizzato per ridurre i tempi di esecuzione. Se non specificato, il campo --flexrs_goal viene impostato sul valore predefinito SPEED_OPTIMIZED, che equivale all'omissione di questo flag.

I job FlexRS influiscono sui seguenti parametri di esecuzione:

  • num_workers imposta solo il numero iniziale di worker. Tuttavia, puoi impostare max_num_workers per motivi legati al 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 parametro region.
  • Devi selezionare una località Dataflow come region.
  • Non puoi utilizzare la serie di macchine M2, M3 o H3 per machine_type.

L'esempio seguente 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.

Go

Per abilitare 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 qualsiasi risorsa scontata disponibile.

  • --flexrs_goal=SPEED_OPTIMIZED, in cui viene ottimizzato per ridurre i tempi di esecuzione. Se non specificato, il campo --flexrs_goal viene impostato sul valore predefinito SPEED_OPTIMIZED, che equivale all'omissione di questo flag.

I job FlexRS influiscono sui seguenti parametri di esecuzione:

  • num_workers imposta solo il numero iniziale di worker. Tuttavia, puoi impostare max_num_workers per motivi legati al 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 parametro region.
  • Devi selezionare una località Dataflow come region.
  • Non puoi utilizzare la serie di macchine M2, M3 o H3 per worker_machine_type.

L'esempio seguente 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.

Monitora i job FlexRS

Puoi monitorare lo stato del job FlexRS nella console Google Cloud in due posizioni:

  1. La pagina Job che mostra tutti i tuoi job.
  2. La pagina Interfaccia di Monitoring del job che hai inviato.

Nella pagina Job, per i job non avviati viene visualizzato lo stato Queued.

Un elenco di job Dataflow nella console Google Cloud contenente un job con stato In coda.
Figura 1: un elenco di job Dataflow nella console Google Cloud contenente un job con stato In coda.

Nella pagina Interfaccia di Monitoring, per i job in attesa nella coda viene visualizzato il messaggio "Il grafico verrà visualizzato dopo l'avvio di un job" nella scheda Grafico del job.

Un singolo job della pipeline in coda nell'interfaccia di monitoraggio di Cloud Dataflow.
Figura 2: un singolo job di pipeline in coda mostrato nell'interfaccia di monitoraggio di Dataflow.