Questo documento spiega le nozioni di base per la creazione di job Batch: come creare ed eseguire un job basato su uno script o un'immagine container e utilizzare variabili predefinite e personalizzate. Per scoprire di più sulla creazione e l'esecuzione dei job, vedi Panoramica della creazione e dell'esecuzione dei job.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la sezione Guida introduttiva a Batch e attiva Batch completando i prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Batch Job Editor (
roles/batch.jobsEditor) sul progetto - Service Account User (
roles/iam.serviceAccountUser) sul service account del job, che per impostazione predefinita è il service account Compute Engine predefinito
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
- Batch Job Editor (
-
Ogni volta che crei un job, assicurati che abbia una configurazione di rete valida.
- Se non hai requisiti di networking specifici per il tuo carico di lavoro o progetto e non hai modificato la rete predefinita per il tuo progetto, non è necessario alcun intervento.
- In caso contrario, devi configurare il networking quando crei un job. Scopri come configurare il networking per un job prima di creare un job di base, in modo da poter modificare gli esempi riportati di seguito in base ai tuoi requisiti di networking.
-
Ogni volta che crei un job, assicurati che abbia un ambiente del sistema operativo (SO) VM valido.
- Se non hai requisiti specifici per l'immagine del sistema operativo VM o per il disco di avvio per il tuo carico di lavoro o progetto, non è richiesta alcuna azione.
- In caso contrario, devi preparare un'opzione di ambiente del sistema operativo VM valida. Prima di creare un job di base, consenti la configurazione predefinita per l'ambiente OS della VM o scopri come personalizzare l'ambiente OS della VM in modo da poter modificare gli esempi riportati di seguito in base alle tue esigenze.
Crea un job di base
Per informazioni su tutti i campi che puoi specificare per un job, consulta la
documentazione di riferimento per la
risorsa REST projects.locations.jobs.
In sintesi, un job è costituito da un array di una o più attività
che eseguono uno o più
elementi eseguibili,
ovvero gli script e/o i container eseguibili per il job.
Per coprire le nozioni di base, questa sezione spiega come creare un job di esempio con
un solo elemento eseguibile, ovvero uno script o un'immagine container:
- Se vuoi utilizzare Batch per scrivere job che eseguono un'immagine container, consulta creare un job container.
- In caso contrario, se non sai se vuoi utilizzare le immagini container o se non hai familiarità con i container, ti consigliamo di creare un job di script.
Il job di esempio per entrambi i tipi di job contiene un gruppo di attività con un array di 4 attività. Ogni attività stampa un messaggio e il relativo indice nell'output standard e in Cloud Logging. La definizione di questo job specifica un parallelismo di 2, il che indica che il job deve essere eseguito su 2 VM per consentire l'esecuzione di 2 attività contemporaneamente.
Crea un job container di base
Puoi selezionare o creare un'immagine container per fornire il codice e le dipendenze per l'esecuzione del job da qualsiasi ambiente di calcolo. Per saperne di più, consulta Utilizzo delle immagini container e Esecuzione di container su istanze VM.
Puoi creare un job contenitore di base utilizzando la console Google Cloud , gcloud CLI, l'API Batch, Go, Java, Node.js, Python o C++.
Console
Per creare un job contenitore di base utilizzando la console Google Cloud :
Nella console Google Cloud , vai alla pagina Elenco job.
Fai clic su Crea. Viene visualizzata la pagina Crea job batch. Nel riquadro a sinistra è selezionata la pagina Dettagli job.
Configura la pagina Dettagli job:
(Facoltativo) Nel campo Nome job, personalizza il nome del job.
Ad esempio, inserisci
example-basic-job.Configura la sezione Dettagli attività:
Nella finestra Nuovo eseguibile, aggiungi almeno uno script o un container per l'esecuzione di questo job.
Ad esempio, per aggiungere un container:
Seleziona URL immagine container (impostazione predefinita).
Nel campo URL immagine container, inserisci l'URL di un'immagine container che vuoi eseguire per ogni attività in questo job.
Ad esempio, per utilizzare l'immagine container Docker
busybox, inserisci il seguente URL:gcr.io/google-containers/busybox(Facoltativo) Per eseguire l'override del comando
ENTRYPOINTdell'immagine container, inserisci un comando nel campo Entry point.Ad esempio, inserisci quanto segue:
/bin/sh(Facoltativo) Per eseguire l'override del comando
CMDdell'immagine container, fai quanto segue:Seleziona la casella di controllo Esegui l'override del comando CMD dell'immagine container. Viene visualizzato un campo.
Nel campo, inserisci uno o più comandi, separando ciascun comando con una nuova riga.
Ad esempio, inserisci i seguenti comandi:
-c echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks.Fai clic su Fine.
Nel campo Conteggio attività, inserisci il numero di attività per questo lavoro. Il valore deve essere un numero intero compreso tra
1e il limite di attività per gruppo di attività.Ad esempio, inserisci
4.Nel campo Parallelismo, inserisci il numero di attività da eseguire contemporaneamente. Il numero non può essere maggiore del numero totale di attività e deve essere un numero intero compreso tra
1e il limite di attività parallele per job.Ad esempio, inserisci
2.
Configura la pagina Specifiche delle risorse:
Nel riquadro a sinistra, fai clic su Specifiche delle risorse. Viene visualizzata la pagina Specifiche delle risorse.
Nella sezione Modello di provisioning delle VM, seleziona una delle seguenti opzioni per il modello di provisioning per le VM di questo job:
Se il tuo job può resistere al prerilascio e vuoi VM scontate, seleziona Spot.
In caso contrario, seleziona Standard.
Ad esempio, seleziona Standard (impostazione predefinita).
Seleziona la sede per questo lavoro:
Nel campo Regione, seleziona una regione.
Ad esempio, seleziona
us-central1 (Iowa)(impostazione predefinita).Nel campo Zona, esegui una delle seguenti operazioni:
Se vuoi limitare l'esecuzione di questo job a una zona specifica, seleziona una zona.
In caso contrario, seleziona Qualsiasi.
Ad esempio, seleziona qualsiasi (impostazione predefinita).
Seleziona una delle seguenti famiglie di macchine:
Per i workload comuni, fai clic su Per uso generico.
Per i workload ad alte prestazioni, fai clic su Ottimizzata per il calcolo.
Per i workload che richiedono molta memoria, fai clic su Ottimizzata per la memoria.
Per i workload ottimizzati per l'acceleratore, fai clic su GPU. Per ulteriori informazioni, consulta la sezione Crea ed esegui un job che utilizza le GPU.
Ad esempio, fai clic su Per uso generico (impostazione predefinita).
Nel campo Serie, seleziona una serie di macchine per le VM di questo job.
Ad esempio, se hai selezionato Per uso generico per la famiglia di macchine, seleziona E2 (impostazione predefinita).
Nel campo Tipo di macchina, seleziona un tipo di macchina per le VM di questo job.
Ad esempio, se hai selezionato E2 per la serie di macchine, seleziona e2-medium (2 vCPU, 4 GB di memoria) (impostazione predefinita).
Configura la quantità di risorse VM necessarie per ogni attività:
Nel campo Core, inserisci la quantità di vCPUs per attività.
Ad esempio, inserisci
1(impostazione predefinita).Nel campo Memoria, inserisci la quantità di RAM in GB per attività.
Ad esempio, inserisci
0.5(impostazione predefinita).
(Facoltativo) Per esaminare la configurazione del job, nel riquadro a sinistra, fai clic su Anteprima.
Fai clic su Crea.
Nella pagina Dettagli job viene visualizzato il job che hai creato.
gcloud
Per creare un job contenitore di base utilizzando gcloud CLI:
Crea un file JSON che specifichi i dettagli di configurazione del job. Ad esempio, per creare un job contenitore di base, crea un file JSON con i seguenti contenuti. Per saperne di più su tutti i campi che puoi specificare per un job, consulta la documentazione di riferimento per la risorsa REST
projects.locations.jobs.{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { CONTAINER } } ], "computeResource": { "cpuMilli": CORES, "memoryMib": MEMORY }, "maxRetryCount": MAX_RETRY_COUNT, "maxRunDuration": "MAX_RUN_DURATION" }, "taskCount": TASK_COUNT, "parallelism": PARALLELISM } ] }Sostituisci quanto segue:
CONTAINER: il container in cui viene eseguita ogni attività. Come minimo, un contenitore deve specificare un'immagine nel sottocampoimageUri, ma potrebbero essere necessari anche sottocampi aggiuntivi. Per ulteriori informazioni, consulta i sottocampicontainere l'esempio di job contenitore in questa sezione.CORES: (Facoltativo) La quantità di core, in particolare vCPUs, che di solito rappresentano metà di un core fisico, da allocare per ogni attività in unità milliCPU. Se il campocpuMillinon è specificato, il valore è impostato su2000(2 vCPU).MEMORY: (Facoltativo) La quantità di memoria da allocare per ogni attività in MB. Se il campomemoryMibnon è specificato, il valore è impostato su2000(2 GB).MAX_RETRY_COUNT: (Facoltativo) Il numero massimo di tentativi per un'attività. Il valore deve essere un numero intero compreso tra0e10. Se il campomaxRetryCountnon è specificato, il valore viene impostato su0, il che significa che l'attività non verrà ritentata. Per saperne di più sul campomaxRetryCount, consulta Automatizzare i nuovi tentativi di esecuzione delle attività.MAX_RUN_DURATION: (Facoltativo) Il tempo massimo di esecuzione consentito per un'attività prima che venga riprovata o non riuscita, formattato come un valore in secondi seguito das, ad esempio3600sper 1 ora. Se il campomaxRunDurationnon è specificato, il valore viene impostato sulla durata massima di esecuzione di un job. Per saperne di più sul campomaxRunDuration, consulta Limitare i tempi di esecuzione per attività e eseguibili utilizzando i timeout.TASK_COUNT: (Facoltativo) Il numero di attività per il job. Il valore deve essere un numero intero compreso tra1e il limite di attività per gruppo di attività. Se il campotaskCountnon è specificato, il valore è impostato su1.PARALLELISM: (Facoltativo) Il numero di attività che il job esegue contemporaneamente. Il numero non può essere maggiore del numero di attività e deve essere un numero intero compreso tra1e il limite di attività parallele per job. Se il campoparallelismnon è specificato, il valore è impostato su1.
Crea un job utilizzando il comando
gcloud batch jobs submit.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESostituisci quanto segue:
JOB_NAME: il nome del job.LOCATION: la sede del lavoro.JSON_CONFIGURATION_FILE: il percorso di un file JSON con i dettagli di configurazione del job.
Ad esempio, per creare un job che esegue attività utilizzando l'immagine container Docker busybox:
Crea un file JSON nella directory attuale denominato
hello-world-container.jsoncon il seguente contenuto:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." ] } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 }, "maxRetryCount": 2, "maxRunDuration": "3600s" }, "taskCount": 4, "parallelism": 2 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] }, "labels": { "department": "finance", "env": "testing" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }Esegui questo comando:
gcloud batch jobs submit example-container-job \ --location us-central1 \ --config hello-world-container.json
API
Per creare un job container di base utilizzando l'API Batch, utilizza il metodo jobs.create.
Per saperne di più su tutti i campi che puoi specificare per un job, consulta la
documentazione di riferimento per la risorsa REST projects.locations.jobs.
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups":