Provisioning e utilizzo di un cluster Hadoop/Spark gestito con Cloud Dataproc (riga di comando)

1. Panoramica

Cloud Dataproc è un servizio Spark e Hadoop gestito che ti consente di sfruttare strumenti di dati open source per l'elaborazione batch, l'esecuzione di query, l'inserimento di flussi e il machine learning. L'automazione di Cloud Dataproc consente di creare i cluster rapidamente, gestirli con facilità e risparmiare disattivando i cluster quando non ti servono. Risparmiando tempo e denaro sull'amministrazione, puoi concentrarti sui tuoi progetti e sui tuoi dati.

Questo tutorial è un adattamento da https://cloud.google.com/dataproc/overview

Obiettivi didattici

  • Creare un cluster Cloud Dataproc gestito (con Apache Spark preinstallato).
  • Come inviare un job Spark
  • Come ridimensionare un cluster
  • Accesso tramite SSH al nodo master di un cluster Dataproc
  • Come utilizzare gcloud per esaminare cluster, job e regole firewall
  • Come arrestare il cluster

Che cosa ti serve

Come utilizzerai questo tutorial?

Solo lettura Leggilo e completa gli esercizi

Come giudichi la tua esperienza di utilizzo dei servizi della piattaforma Google Cloud?

Principiante Livello intermedio Eccellente

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

  1. Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o G Suite, devi crearne uno.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome precedente è già stato utilizzato e non funzionerà correttamente). Verrà indicato più avanti in questo codelab come PROJECT_ID.

  1. Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.

Eseguire questo codelab non dovrebbe costare molto. Assicurati di seguire le istruzioni nella sezione "Pulizia" in cui viene spiegato come arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

3. Abilita le API Cloud Dataproc e Google Compute Engine

Fai clic sull'icona del menu nella parte superiore sinistra dello schermo.

2bfc27ef9ba2ec7d.png

Seleziona Gestore API dal menu a discesa.

408af5f32c4b7c25.png

Fai clic su Abilita API e servizi.

a9c0e84296a7ba5b.png

Cerca "Compute Engine" nella casella di ricerca. Fai clic su "API Google Compute Engine" nell'elenco dei risultati visualizzato.

b6adf859758d76b3.png

Nella pagina Google Compute Engine, fai clic su Abilita.

da5584a1cbc77104.png

Una volta attivato, fai clic sulla freccia rivolta a sinistra per tornare indietro.

Ora cerca "API Google Cloud Dataproc". e attivare anche questa funzionalità.

f782195d8e3d732a.png

4. Avvia Cloud Shell

Questa macchina virtuale basata su Debian viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Ciò significa che per questo codelab è sufficiente un browser (sì, funziona su Chromebook).

  1. Per attivare Cloud Shell dalla console Cloud, fai semplicemente clic su Attiva Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (il provisioning e la connessione all'ambiente dovrebbero richiedere solo pochi minuti).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

Dopo la connessione a Cloud Shell, dovresti vedere che hai già eseguito l'autenticazione e che il progetto è già impostato su PROJECT_ID.

gcloud auth list

Output comando

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

Se, per qualche motivo, il progetto non è impostato, invia semplicemente il seguente comando:

gcloud config set project <PROJECT_ID>

Stai cercando il tuo PROJECT_ID? Controlla l'ID utilizzato nei passaggi di configurazione o cercalo nella dashboard della console Cloud:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, cosa che può essere utile quando eseguirai comandi futuri.

echo $GOOGLE_CLOUD_PROJECT

Output comando

<PROJECT_ID>
  1. Infine, imposta la zona e la configurazione del progetto predefinite.
gcloud config set compute/zone us-central1-f

Puoi scegliere zone diverse. Per ulteriori informazioni, consulta Regioni e Zone.

5. Crea un cluster Cloud Dataproc

Dopo l'avvio di Cloud Shell, puoi utilizzare la riga di comando per richiamare il comando gcloud di Cloud SDK oppure altri strumenti disponibili nell'istanza della macchina virtuale.

Scegli un nome per il cluster da utilizzare in questo lab:

$ CLUSTERNAME=${USER}-dplab

Inizia creando un nuovo cluster:

$ gcloud dataproc clusters create ${CLUSTERNAME} \
  --region=us-central1 \
  --scopes=cloud-platform \
  --tags codelab \
  --zone=us-central1-c

Le impostazioni predefinite del cluster, che includono nodi con due worker, dovrebbero essere sufficienti per questo tutorial. Il comando riportato sopra include l'opzione --zone per specificare la zona geografica in cui verrà creato il cluster e due opzioni avanzate, --scopes e --tags, che vengono spiegate di seguito quando utilizzi le funzionalità abilitate. Per informazioni sull'utilizzo dei flag della riga di comando per personalizzare le impostazioni del cluster, vedi il comando Cloud SDK gcloud dataproc clusters create.

6. Inviare un job Spark al cluster

Puoi inviare un job tramite una richiesta dell'API Cloud Dataproc jobs.submit, utilizzando lo strumento a riga di comando gcloud oppure dalla console della piattaforma Google Cloud. Puoi anche connetterti a un'istanza di macchina nel tuo cluster tramite SSH e quindi eseguire un job dall'istanza.

Inviamo un job utilizzando lo strumento gcloud dalla riga di comando di Cloud Shell:

$ gcloud dataproc jobs submit spark --cluster ${CLUSTERNAME} \
  --class org.apache.spark.examples.SparkPi \
  --jars file:///usr/lib/spark/examples/jars/spark-examples.jar -- 1000

Durante l'esecuzione del job visualizzerai l'output nella finestra di Cloud Shell.

Interrompi l'output premendo Ctrl-C. Il comando gcloud verrà arrestato, ma il job continuerà a essere in esecuzione sul cluster Dataproc.

7. Elenco job e riconnetti

Stampa un elenco di processi:

$ gcloud dataproc jobs list --cluster ${CLUSTERNAME}

Il lavoro inviato più di recente è in cima all'elenco. Copia l'ID job e incollalo al posto di "jobId" nel comando seguente. Il comando si riconnetterà al job specificato e mostrerà il suo output:

$ gcloud dataproc jobs wait jobId

Al termine del job, l'output includerà un'approssimazione del valore di Pi.

493928df54f61386.png

8. Ridimensiona il cluster

Per eseguire calcoli di grandi dimensioni, potrebbe essere opportuno aggiungere più nodi al cluster per velocizzarlo. Dataproc consente di aggiungere e rimuovere nodi dal cluster in qualsiasi momento.

Esamina la configurazione del cluster:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

Ingrandisci il cluster aggiungendo alcuni nodi prerilasciabili:

$ gcloud dataproc clusters update ${CLUSTERNAME} --num-secondary-workers=2

Esamina di nuovo il cluster:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

Tieni presente che oltre al valore workerConfig della descrizione originale del cluster, ora è presente anche un elemento secondaryWorkerConfig che include due instanceNames per i worker prerilasciabili. Dataproc mostra lo stato del cluster come pronto durante l'avvio dei nuovi nodi.

Poiché hai iniziato con due nodi e ora ne hai quattro, i tuoi job Spark dovrebbero essere eseguiti circa il doppio della velocità.

9. SSH nel cluster

Connettiti tramite SSH al nodo master, il cui nome istanza è sempre il nome del cluster, con l'aggiunta di -m:

$ gcloud compute ssh ${CLUSTERNAME}-m --zone=us-central1-c

La prima volta che esegui un comando ssh su Cloud Shell, verranno generate chiavi SSH per il tuo account. Puoi scegliere una passphrase o usare una passphrase vuota per il momento e modificarla in un secondo momento usando ssh-keygen, se vuoi.

Nell'istanza, controlla il nome host:

$ hostname

Poiché hai specificato --scopes=cloud-platform al momento della creazione del cluster, puoi eseguire comandi gcloud sul cluster. Elenca i cluster nel tuo progetto:

$ gcloud dataproc clusters list

Al termine, esci dalla connessione SSH:

$ logout

10. Esamina i tag

Quando hai creato il cluster, hai incluso un'opzione --tags per aggiungere un tag a ciascun nodo del cluster. I tag vengono utilizzati per collegare le regole firewall a ciascun nodo. Non hai creato regole firewall corrispondenti in questo codelab, ma puoi comunque esaminare i tag su un nodo e le regole firewall sulla rete.

Stampa la descrizione del nodo master:

$ gcloud compute instances describe ${CLUSTERNAME}-m --zone us-central1-c

Cerca tags: verso la fine dell'output e vedrai che include codelab.

Stampa le regole del firewall:

$ gcloud compute firewall-rules list

Osserva le colonne SRC_TAGS e TARGET_TAGS. Collegando un tag a una regola firewall, puoi specificare che debba essere utilizzato su tutti i nodi che lo contengono.

11. Arresta il cluster

Puoi arrestare un cluster tramite una richiesta clusters.delete dell'API Cloud Dataproc, dalla riga di comando utilizzando l'eseguibile gcloud dataproc clusters delete oppure dalla console della piattaforma Google Cloud.

Arresta il cluster utilizzando la riga di comando di Cloud Shell:

$ gcloud dataproc clusters delete ${CLUSTERNAME} --region us-central1

12. Complimenti!

Hai imparato a creare un cluster Dataproc, inviare un job Spark, ridimensionare un cluster, utilizzare SSH per accedere al nodo master, utilizzare gcloud per esaminare cluster, job e regole firewall e arrestare il cluster utilizzando gcloud.

Scopri di più

Licenza

Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 3.0 Generic, e Apache 2.0.