Crea una pipeline Dataflow utilizzando Java

Questo documento mostra come configurare il tuo Google Cloud progetto, creare una pipeline di esempio creata con l'SDK Apache Beam per Java ed eseguire la pipeline di esempio nel servizio Dataflow. La pipeline legge un file di testo da Cloud Storage, conta il numero di parole univoche nel file e poi scrive di nuovo i conteggi delle parole in Cloud Storage. Per un'introduzione alla pipeline WordCount, guarda il video How to use WordCount in Apache Beam.

Questo tutorial richiede Maven, ma è anche possibile convertire il progetto di esempio da Maven a Gradle. Per saperne di più, consulta (Facoltativo) Converti da Maven a Gradle.


Per seguire le indicazioni dettagliate per questa attività direttamente nella Google Cloud console, fai clic su Procedura guidata:

Procedura guidata


Prima di iniziare

  1. Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il Google Cloud progetto che stai creando.

    • Seleziona il Google Cloud progetto che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del Google Cloud progetto.

  6. Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.

  7. Abilita le API Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore e Cloud Resource Manager:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), che contiene l' serviceusage.services.enable autorizzazione. Scopri come concedere i ruoli.

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  8. Crea le credenziali di autenticazione locali per il tuo account utente:

    gcloud auth application-default login

    Se viene restituito un errore di autenticazione e utilizzi un provider di identità (IdP) esterno, verifica di aver acceduto a gcloud CLI con la tua identità federata.

  9. Concedi i ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio, myemail@example.com.
    • ROLE: il ruolo IAM che concedi al tuo account utente.
  10. Installa Google Cloud CLI.

  11. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  12. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  13. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il Google Cloud progetto che stai creando.

    • Seleziona il Google Cloud progetto che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del Google Cloud progetto.

  14. Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.

  15. Abilita le API Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore e Cloud Resource Manager:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), che contiene l' serviceusage.services.enable autorizzazione. Scopri come concedere i ruoli.

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  16. Crea le credenziali di autenticazione locali per il tuo account utente:

    gcloud auth application-default login

    Se viene restituito un errore di autenticazione e utilizzi un provider di identità (IdP) esterno, verifica di aver acceduto a gcloud CLI con la tua identità federata.

  17. Concedi i ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio, myemail@example.com.
    • ROLE: il ruolo IAM che concedi al tuo account utente.
  18. Concedi i ruoli al account di servizio Compute Engine predefinito. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
    • Sostituisci PROJECT_ID con l'ID progetto.
    • Sostituisci PROJECT_NUMBER con il numero del progetto. Per trovare il numero del progetto, consulta Identifica i progetti o utilizza il comando gcloud projects describe.
    • Sostituisci SERVICE_ACCOUNT_ROLE con ogni singolo ruolo.
  19. Crea un bucket Cloud Storage e configurarlo come segue:
    • Imposta la classe di archiviazione su S (Standard).
    • Imposta la località di archiviazione su: US (Stati Uniti).
    • Sostituisci BUCKET_NAME con un nome bucket univoco. Non includere informazioni sensibili nel nome del bucket, poiché lo spazio dei nomi dei bucket è globale e visibile pubblicamente.
    gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
  20. Copia quanto segue, in quanto ti servirà in una sezione successiva:
    • Il nome del bucket Cloud Storage.
    • L'ID progetto. Google Cloud Per trovare questo ID, consulta Identifica i progetti.
  21. Scarica e installa il Java Development Kit (JDK) versione 11. (Dataflow continua a supportare la versione 8.) Verifica che la JAVA_HOME variabile di ambiente sia impostata e punti all'installazione di JDK.
  22. Scarica e installa Apache Maven seguendo la guida all'installazione di Maven per il tuo sistema operativo specifico.

Recupera il codice della pipeline

L' SDK Apache Beam è un modello di programmazione open source per pipeline di trattamento dati. Definisci queste pipeline con un programma Apache Beam e puoi scegliere un runner, come Dataflow, per eseguire la pipeline.

  1. Nella shell o nel terminale, utilizza il plug-in Maven Archetype per creare un progetto Maven sul computer che contenga gli esempi WordCount dell'SDK Apache Beam:
    mvn archetype:generate \
        -DarchetypeGroupId=org.apache.beam \
        -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
        -DarchetypeVersion=2.73.0 \
        -DgroupId=org.example \
        -DartifactId=word-count-beam \
        -Dversion="0.1" \
        -Dpackage=org.apache.beam.examples \
        -DinteractiveMode=false
    

    Il comando crea una nuova directory denominata word-count-beam nella directory corrente. La directory word-count-beam contiene un semplice file pom.xml e una serie di pipeline di esempio che contano le parole nei file di testo.

  2. Verifica che la directory word-count-beam contenga il file pom.xml:

    Linux o macOS

    cd word-count-beam/
    ls

    L'output è il seguente:

    pom.xml   src

    Windows

    cd word-count-beam/
    dir

    L'output è il seguente:

    pom.xml   src
  3. Verifica che il progetto Maven contenga le pipeline di esempio:

    Linux o macOS

    ls src/main/java/org/apache/beam/examples/

    L'output è il seguente:

    DebuggingWordCount.java   WindowedWordCount.java   common
    MinimalWordCount.java   WordCount.java

    Windows

    dir src/main/java/org/apache/beam/examples/

    L'output è il seguente:

    DebuggingWordCount.java   WindowedWordCount.java   common
    MinimalWordCount.java   WordCount.java

Per un'introduzione dettagliata ai concetti di Apache Beam utilizzati in questi esempi, consulta l'esempio WordCount di Apache Beam. Le istruzioni nelle sezioni successive utilizzano WordCount.java.

Esegui la pipeline in locale

  • Nella shell o nel terminale, esegui la WordCount pipeline in locale dalla tua word-count-beam directory:
    mvn compile exec:java \
        -Dexec.mainClass=org.apache.beam.examples.WordCount \
        -Dexec.args="--output=counts"
    

    I file di output hanno il prefisso counts e vengono scritti nella word-count-beam directory. Contengono parole univoche dal testo di input e il numero di occorrenze di ogni parola.

Esegui la pipeline nel servizio Dataflow

  • Nella shell o nel terminale, crea ed esegui la WordCount pipeline nel servizio Dataflow dalla tua word-count-beam directory:
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=org.apache.beam.examples.WordCount \
        -Dexec.args="--project=PROJECT_ID \
        --gcpTempLocation=gs://BUCKET_NAME/temp/ \
        --output=gs://BUCKET_NAME/output \
        --runner=DataflowRunner \
        --region=REGION"
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo Google Cloud ID progetto
    • BUCKET_NAME: il nome del bucket Cloud Storage
    • REGION: una regione Dataflow, ad esempio us-central1

Visualizza i tuoi risultati

  1. Nella Google Cloud console, vai alla pagina Job di Dataflow.

    Vai a Job

    La pagina Job mostra i dettagli di tutti i job disponibili, incluso lo stato. Lo Stato del job wordcount è inizialmente In esecuzione e poi viene aggiornato a Riuscito.

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

    Vai a Buckets

    La pagina Bucket mostra l'elenco di tutti i bucket di archiviazione nel tuo progetto.

  3. Fai clic sul bucket di archiviazione che hai creato.

    La pagina Dettagli bucket mostra i file di output e i file di gestione temporanea creati dal job Dataflow.

Libera spazio

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il Google Cloud progetto con le risorse.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il Google Cloud progetto creato per la guida rapida.

  1. Nella Google Cloud console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.

Elimina le singole risorse

Se vuoi conservare il Google Cloud progetto che hai utilizzato in questa guida rapida, elimina le singole risorse:

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

    Vai a Bucket

  2. Fai clic sulla casella di controllo del bucket da eliminare.
  3. Per eliminare il bucket, fai clic su Elimina, quindi segui le istruzioni.
  4. Revoca i ruoli che hai concesso al account di servizio Compute Engine predefinito. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    gcloud projects remove-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=SERVICE_ACCOUNT_ROLE
  5. (Facoltativo) Revoca le credenziali di autenticazione che hai creato ed elimina il file di credenziali locale

    gcloud auth application-default revoke
  6. (Facoltativo) Revoca le credenziali da gcloud CLI.

    gcloud auth revoke

Passaggi successivi