Crea un'immagine Dataproc personalizzata

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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

Note:

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

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 dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

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

    Abilita le API

  5. Installa Google Cloud CLI.
  6. Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:

    gcloud init
  7. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

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

    Abilita le API

  10. Installa Google Cloud CLI.
  11. Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:

    gcloud init
  12. Installare Python 2.7 e versioni successive
  13. Prepara uno script di personalizzazione che installa i pacchetti personalizzati e/o aggiorna le 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 Cloud Storage nel progetto

  1. Nella console, vai alla pagina Browser Cloud Storage.

    Vai al browser

  2. Fai clic su Crea bucket.
  3. Nella pagina Crea un bucket, inserisci le informazioni sul 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 i pacchetti personalizzati e/o aggiornare le configurazioni. Al termine dello script di personalizzazione, arresta l'istanza VM e crea un'immagine Dataproc personalizzata 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 utilizza l'interfaccia a riga di comando gcloud per eseguire flussi di lavoro in più passaggi su Compute Engine.

Esegui il codice

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

python 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 alla regex [a-z](?:[-a-z0-9]{0,61}[a-z0-9]), ad esempio non contenere trattini bassi o spazi e contenere 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 "1.5.35-debian10".
  • --customization-script: un percorso locale verso lo script che lo strumento eseguirà per installare i pacchetti personalizzati o 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 tutte le altre azioni di inizializzazione che vuoi eseguire quando crei un cluster con la tua immagine personalizzata.
  • --zone: la zona di 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 rimanda al bucket Cloud Storage che hai creato in Creare un bucket Cloud Storage nel progetto. generate_custom_image.py scriverà i file di log in questo bucket.

Flag facoltativi

  • --family: la famiglia di immagini. Le famiglie di immagini vengono utilizzate per raggruppare immagini simili e possono essere utilizzate quando si crea un cluster come puntatore all'immagine più recente della famiglia. Ad esempio, "custom-1-5-debian10".
  • --no-smoke-test: questo è un flag facoltativo che disabilita il test di fumo per la nuova immagine personalizzata. Il test del fumo crea un cluster di test Dataproc con l'immagine appena creata, esegue un piccolo job e poi elimina il cluster alla fine del test. Il test del fumo viene eseguito per impostazione predefinita per verificare che l'immagine personalizzata appena creata possa creare un cluster Dataproc funzionale. La disattivazione di questo passaggio tramite il flag --no-smoke-test accelera la procedura di compilazione delle immagini personalizzate, ma l'utilizzo non è consigliato.

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

Se generate_custom_image.py ha esito positivo, la imageURI dell'immagine personalizzata sarà elencata nell'output della finestra del terminale (la versione imageUri completa è mostrata 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 personalizzate della versione immagine per gli utenti avanzati

Quando utilizzi lo strumento immagine standard standard 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 il proprio processo per creare un'immagine Dataproc personalizzata devono aggiungere l'etichetta manualmente all'immagine personalizzata nel modo seguente:

  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

Specifica l'immagine personalizzata quando crei un cluster Dataproc. Un'immagine personalizzata viene salvata in Cloud Compute Image ed è valida per creare un cluster Dataproc per 60 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 60 giorni).

URI immagine personalizzato

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

  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.

  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 della tua immagine personalizzata al seguente comando gcloud per elencare l'URI (selfLink) della tua 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 delle immagini filtrate per limitare il numero di immagini visualizzate.
  2. Si apre la pagina dei dettagli dell'immagine. Fai clic su REST equivalente.
  3. La risposta REST elenca ulteriori informazioni 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 create cluster Dataproc 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 in masterConfig, workerConfig e, se applicabile, nell'oggetto 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 Crea un cluster di Dataproc. Viene selezionato il riquadro Configura cluster.
  2. Nella sezione Controllo delle versioni, fai clic su MODIFICA. Seleziona la scheda IMMAGINE PERSONALIZZATA, scegli l'immagine personalizzata da utilizzare per il cluster Dataproc, quindi fai clic su SELEZIONA.

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

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

Puoi utilizzare le immagini personalizzate per sovrascrivere eventuali proprietà del cluster impostate durante la creazione del cluster. Se un utente crea un cluster con l'immagine personalizzata, ma imposta proprietà del cluster diverse da quelle che imposti con l'immagine personalizzata, le impostazioni della proprietà cluster personalizzate avranno la precedenza.

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

  1. Nello script di personalizzazione dell'immagine personalizzata, crea un file dataproc.custom.properties in /etc/google-dataproc, quindi imposta i valori della proprietà del cluster nel file.
    • Esempio di contenuti del file dataproc.custom.properties:
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      

Esempio di snippet di creazione del file di personalizzazione per eseguire l'override di due proprietà del cluster:

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

a creare un cluster con un'immagine personalizzata scaduta

Per impostazione predefinita, le immagini personalizzate scadono 60 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. L'interfaccia a riga di comando gcloud emetterà un messaggio di errore che include il nome della proprietà dataproc:dataproc.custom.image.expiration.token e il valore del token del cluster.

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

  3. Utilizza l'interfaccia a riga di comando gcloud per creare di nuovo il cluster Dataproc, aggiungendo il "valore 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 riuscire.