Crea un'immagine personalizzata Dataproc

Puoi eseguire il provisioning dei cluster Dataproc con un'immagine personalizzata che include i pacchetti preinstallati di un utente. I passaggi seguenti spiegano come creare un'immagine personalizzata e installarla su un cluster Dataproc.

Note:

  • Le istruzioni in questo documento si applicano solo ai sistemi operativi Linux. Altri sistemi operativi potrebbero essere supportati nelle future release di Dataproc.
  • Le build di immagini personalizzate richiedono a partire da un'immagine di base Dataproc (sono supportate le immagini di base Debian, Rocky Linux e Ubuntu).
  • Utilizzo di componenti facoltativi: per impostazione predefinita, le immagini personalizzate ereditano tutti i componenti facoltativi di Dataproc (configurazioni e pacchetti del sistema operativo) dalle immagini di base. Puoi personalizzare le versioni e le configurazioni dei pacchetti del sistema operativo predefiniti, ma devi specificare il nome del componente facoltativo quando crei il cluster (ad esempio, eseguendo il comando gcloud dataproc clusters create --optional-components=COMPONENT_NAME, consulta Aggiunta di componenti facoltativi). Se il nome del componente non viene specificato quando crei il cluster, questo verrà eliminato (inclusi eventuali pacchetti e configurazioni del sistema operativo personalizzati).

Prima di iniziare

Configura il progetto

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Dataproc API, Compute Engine API, and Cloud Storage.

    Abilita le API

  5. Installa Google Cloud CLI.
  6. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  7. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Abilita le API Dataproc API, Compute Engine API, and Cloud Storage.

    Abilita le API

  10. Installa Google Cloud CLI.
  11. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  12. Installa Python 3.11 o versioni successive
  13. Prepara uno script di personalizzazione che installi pacchetti personalizzati e/o aggiorna configurazioni, ad esempio:
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

Crea un bucket di Cloud Storage nel progetto

  1. Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.

    Vai alla pagina Bucket

  2. Fai clic su Crea bucket.
  3. Nella pagina Crea un bucket, inserisci le informazioni del bucket. Per andare al passaggio successivo, fai clic su Continua.
  4. Fai clic su Crea.

Genera un'immagine personalizzata

Utilizzerai generate_custom_image.py, un programma Python per creare un'immagine personalizzata Dataproc.

Come funziona

Il programma generate_custom_image.py avvia un'istanza VM temporanea di Compute Engine con l'immagine di base Dataproc specificata, quindi esegue lo script di personalizzazione all'interno dell'istanza VM per installare pacchetti personalizzati e/o aggiornare le configurazioni. Al termine dello script di personalizzazione, l'istanza VM viene arrestata e viene creata un'immagine personalizzata Dataproc dal disco dell'istanza VM. La VM temporanea viene eliminata dopo la creazione dell'immagine personalizzata. L'immagine personalizzata viene salvata e può essere utilizzata per creare cluster Dataproc.

Il programma generate_custom_image.py usa gcloud CLI per eseguire flussi di lavoro in più passaggi su Compute Engine.

Esegui il codice

Crea un fork o clona i file su GitHub in Immagini personalizzate Dataproc. Poi esegui il programma generate_custom_image.py per fare in modo che Dataproc generi e salvi l'immagine personalizzata.

python3 generate_custom_image.py \
    --image-name=CUSTOM_IMAGE_NAME \
    [--family=CUSTOM_IMAGE_FAMILY_NAME] \
    --dataproc-version=IMAGE_VERSION \
    --customization-script=LOCAL_PATH \
    --zone=ZONE \
    --gcs-bucket=gs://BUCKET_NAME \
    [--no-smoke-test]

Flag obbligatori

  • --image-name: il nome dell'output dell'immagine personalizzata. Nota: il nome dell'immagine deve corrispondere all'espressione regolare [a-z](?:[-a-z0-9]{0,61}[a-z0-9]), ad esempio non deve contenere trattini bassi o spazi e meno di 64 caratteri.
  • --dataproc-version: la versione immagine Dataproc da utilizzare nell'immagine personalizzata. Specifica la versione nel formato "x.y.z-os" o "x.y.z-rc-os", ad esempio "2.0.69-debian10".
  • --customization-script: un percorso locale dello script che lo strumento eseguirà per installare i pacchetti personalizzati o per eseguire altre personalizzazioni. Tieni presente che questo script viene eseguito solo sulla VM temporanea utilizzata per creare l'immagine personalizzata. Puoi specificare uno script di inizializzazione diverso per qualsiasi altra azione di inizializzazione che vuoi eseguire quando crei un cluster con la tua immagine personalizzata.
  • --zone: la zona Compute Engine in cui generate_custom_image.py creerà una VM temporanea da utilizzare per creare l'immagine personalizzata.
  • --gcs-bucket: un URI, nel formato gs://BUCKET_NAME, che punta al bucket Cloud Storage creato nella sezione Creare un bucket Cloud Storage nel tuo progetto. generate_custom_image.py scriverà i file di log in questo bucket.

Flag facoltativi

  • --family: la famiglia di immagini dell'immagine. Le famiglie di immagini vengono utilizzate per raggruppare immagini simili e possono essere utilizzate durante la creazione di un cluster come puntatore all'immagine più recente nella famiglia. Ad esempio, "custom-1-5-debian10".
  • --no-smoke-test: questo è un flag facoltativo che disattiva il test del fumo per la nuova immagine personalizzata. Il test di fumo crea un cluster di test Dataproc con l'immagine appena creata, esegue un piccolo job, quindi elimina il cluster alla fine del test. Per impostazione predefinita, il test del fumo viene eseguito per verificare che l'immagine personalizzata appena creata possa creare un cluster Dataproc funzionante. Se disabiliti questo passaggio con il flag --no-smoke-test, il processo di compilazione dell'immagine personalizzata verrà accelerato, ma il suo utilizzo è sconsigliato.
  • --subnet: la subnet da utilizzare per creare la VM che crea l'immagine Dataproc personalizzata. Se il progetto fa parte di un VPC condiviso, devi specificare l'URL completo della subnet nel seguente formato: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Per un elenco di flag facoltativi aggiuntivi, consulta Argomenti facoltativi su GitHub.

Se generate_custom_image.py ha esito positivo, il valore imageURI dell'immagine personalizzata verrà elencato nell'output della finestra del terminale (il valore imageUri completo è mostrato in grassetto di seguito):

...
managedCluster:
    clusterName: verify-image-20180614213641-8308a4cd
    config:
      gceClusterConfig:
        zoneUri: ZONE
      masterConfig:
        imageUri: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

INFO:__main__:Successfully built Dataproc custom image: CUSTOM_IMAGE_NAME
INFO:__main__:

#####################################################################
  WARNING: DATAPROC CUSTOM IMAGE 'CUSTOM_IMAGE_NAME'
           WILL EXPIRE ON 2018-07-14 21:35:44.133000.
#####################################################################

Etichette delle versioni delle immagini personalizzate per utenti avanzati

Quando utilizzi lo strumento standard per le immagini personalizzate di Dataproc, lo strumento imposta automaticamente un'etichetta goog-dataproc-version obbligatoria sull'immagine personalizzata creata. L'etichetta riflette le funzionalità e i protocolli delle funzionalità utilizzati da Dataproc per gestire il software nell'immagine.

Gli utenti avanzati che utilizzano i propri processi per creare un'immagine Dataproc personalizzata devono aggiungere manualmente l'etichetta all'immagine personalizzata, come indicato di seguito:

  1. Estrai l'etichetta goog-dataproc-version dall'immagine Dataproc di base utilizzata per creare l'immagine personalizzata.

    gcloud compute images describe ${BASE_DATAPROC_IMAGE} \
        --project cloud-dataproc \
        --format="value(labels.goog-dataproc-version)"
    

  2. Imposta l'etichetta sull'immagine personalizzata.

    gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
    

Utilizza un'immagine personalizzata

Devi specificare l'immagine personalizzata quando crei un cluster Dataproc. Un'immagine personalizzata viene salvata in Cloud Compute Images ed è valida per creare un cluster Dataproc per 365 giorni dalla data di creazione (consulta Come creare un cluster con un'immagine personalizzata scaduta per utilizzare un'immagine personalizzata dopo la data di scadenza di 365 giorni).

URI immagine personalizzato

Passi il imageUri dell'immagine personalizzata all'operazione di creazione del cluster. Questo URI può essere specificato in tre modi:

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
  2. URI parziale: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. Nome breve: CUSTOM_IMAGE_NAME

Le immagini personalizzate possono essere specificate anche dall'URI della famiglia, che sceglie sempre l'immagine più recente all'interno della famiglia di immagini.

  1. URI completo:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
  2. URI parziale: projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME

Come trovare l'URI dell'immagine personalizzata

Comando gcloud

Esegui questo comando gcloud per elencare i nomi delle immagini personalizzate:

gcloud compute images list

Passa il nome dell'immagine personalizzata al seguente comando gcloud per elencare l'URI (selfLink) dell'immagine personalizzata:

gcloud compute images describe custom-image-name
...
name: CUSTOM_IMAGE_NAME
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

Console

  1. Apri la pagina Compute Engine→Immagini nella console Google Cloud e fai clic sul nome dell'immagine. Puoi inserire una query nella casella di testo Immagini filtrate per limitare il numero di immagini visualizzate.
  2. Si apre la pagina dei dettagli delle immagini. Fai clic su REST equivalente.
  3. La risposta REST elenca informazioni aggiuntive sull'immagine, incluso selfLink, che è l'URI dell'immagine.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
      "sourceDisk": ...,
      ...
    }
    

Crea un cluster con un'immagine personalizzata

Puoi creare un cluster con nodi master e worker che utilizzano un'immagine personalizzata con lo strumento a riga di comando gcloud, l'API Dataproc o la console Google Cloud.

Comando gcloud

Puoi creare un cluster Dataproc con un'immagine personalizzata utilizzando il comando dataproc clusters create con il flag --image. Esempio:
gcloud dataproc clusters create CLUSTER-NAME \
    --image=CUSTOM_IMAGE_URI \
    --region=REGION \
    ... other flags ...

API REST

Puoi creare un cluster con un'immagine personalizzata specificando l'URI dell'immagine personalizzata nel campo InstanceGroupConfig.imageUri nell'oggetto masterConfig, workerConfig e, se applicabile, secondaryWorkerConfig incluso in una richiesta API cluster.create.

Esempio: richiesta REST per creare un cluster Dataproc standard (un master, due nodi worker) con un'immagine personalizzata.

POST /v1/projects/PROJECT_ID/regions/REGION/clusters/
{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "masterConfig": {
      "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
    },
    "workerConfig": {
      "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
    }
  }
}
  

Console

  1. Nella console Google Cloud, apri la pagina di Dataproc Crea un cluster. Il riquadro Configura cluster è selezionato.
  2. Nella sezione Controllo delle versioni, fai clic su CAMBIA. Seleziona la scheda IMMAGINE PERSONALIZZATA, scegli l'immagine personalizzata da utilizzare per il cluster Dataproc e fai clic su SELEZIONA.

Quando invii il modulo Crea un cluster, viene eseguito il provisioning delle VM del tuo cluster con l'immagine personalizzata selezionata.

Esegui l'override delle proprietà del cluster Dataproc con un'immagine personalizzata

Puoi utilizzare immagini personalizzate per sovrascrivere qualsiasi proprietà del cluster impostata durante la creazione del cluster. Se un utente crea un cluster con la tua immagine personalizzata, ma imposta le proprietà del cluster diverse da quelle che hai impostato con l'immagine personalizzata, le impostazioni delle proprietà del cluster di immagini personalizzate avranno la precedenza.

Per impostare le proprietà del cluster con un'immagine personalizzata:

  1. Nello script di personalizzazione delle immagini personalizzate, crea un file dataproc.custom.properties in /etc/google-dataproc, quindi imposta i valori delle proprietà del cluster nel file.
    • Contenuti del file dataproc.custom.properties di esempio:
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      

Snippet di creazione file di script di personalizzazione di esempio per sostituire due proprietà del cluster:

     cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
     dataproc.conscrypt.provider.enable=true
     dataproc.logging.stackdriver.enable=false
     EOF

Creare un cluster con un'immagine personalizzata scaduta

Per impostazione predefinita, le immagini personalizzate scadono 365 giorni dopo la data di creazione dell'immagine. Puoi creare un cluster che utilizza un'immagine personalizzata scaduta completando i seguenti passaggi.

  1. Prova a creare un cluster Dataproc con un'immagine personalizzata scaduta o un'immagine personalizzata che scadrà entro 10 giorni.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --region=REGION \
        ... other flags ...
    

  2. Gcloud CLI genererà un messaggio di errore che include il nome della proprietà dataproc:dataproc.custom.image.expiration.token del cluster e il valore del token.

    dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
    
    Copia la stringa "valore token" negli appunti.

  3. Utilizza gcloud CLI per creare di nuovo il cluster Dataproc, aggiungendo il "valore del token" copiato in precedenza come proprietà del cluster.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \
        --region=REGION \
        ... other flags ...
    

La creazione del cluster con l'immagine personalizzata dovrebbe avere esito positivo.