Crea una pipeline Dataflow utilizzando Java

Questo documento mostra come configurare il progetto Google Cloud, creare una pipeline di esempio creata con l'SDK Apache Beam per Java ed eseguire la pipeline di esempio sul servizio Dataflow. La pipeline legge un file di testo da Cloud Storage, conta il numero di parole univoche nel file, quindi scrive il conteggio delle parole in Cloud Storage. Per un'introduzione alla pipeline Conteggio parole, consulta il video Come utilizzare WordCount in Apache Beam.

Questo tutorial richiede Maven, ma è anche possibile convertire il progetto di esempio da Maven a Gradle. Per scoprire di più, consulta Facoltativo: converti da Maven a Gradle.


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

Guidami


Prima di iniziare

  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. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

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

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

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

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

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

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

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  7. Crea credenziali di autenticazione locali per il tuo Account Google:

    gcloud auth application-default login
  8. Concedi i ruoli al tuo Account Google. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Sostituisci PROJECT_ID con l'ID progetto.
    • Sostituisci EMAIL_ADDRESS con il tuo indirizzo email.
    • Sostituisci ROLE con ogni singolo ruolo.
  9. Installa Google Cloud CLI.
  10. Per initialize gcloud CLI, esegui questo comando:

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

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

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

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

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

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

    gcloud services enable dataflow compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com
  14. Crea credenziali di autenticazione locali per il tuo Account Google:

    gcloud auth application-default login
  15. Concedi i ruoli al tuo Account Google. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Sostituisci PROJECT_ID con l'ID progetto.
    • Sostituisci EMAIL_ADDRESS con il tuo indirizzo email.
    • Sostituisci ROLE con ogni singolo ruolo.
  16. Concedi ruoli al tuo account di servizio predefinito di Compute Engine. Esegui il comando seguente una volta per ognuno 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.
  17. Crea un bucket Cloud Storage e configuralo nel seguente modo:
    • Imposta la classe di archiviazione su S (standard).
    • Imposta la località di archiviazione come segue: US (Stati Uniti).
    • Sostituisci BUCKET_NAME con un nome di bucket univoco. Non includere informazioni sensibili nel nome del bucket perché lo spazio dei nomi dei bucket è globale e visibile pubblicamente.
    gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
  18. Copia quanto segue, in base alle tue esigenze in una sezione successiva:
  19. Scarica e installa il Java Development Kit (JDK) versione 11. (Dataflow continua a supportare la versione 8.) Verifica che la variabile di ambiente JAVA_HOME sia impostata e che punti all'installazione JDK.
  20. 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 le pipeline di elaborazione dei dati. Puoi definire queste pipeline con un programma Apache Beam e scegliere un runner, ad esempio Dataflow, per eseguire la pipeline.

  1. Nella shell o nel terminale, utilizza il plug-in Maven Archetype per creare sul computer un progetto Maven contenente gli esempi WordCount dell'SDK Apache Beam:
    mvn archetype:generate \
        -DarchetypeGroupId=org.apache.beam \
        -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
        -DarchetypeVersion=2.55.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 attuale. La directory word-count-beam contiene un semplice file pom.xml e una serie di pipeline di esempio che conteggiano 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 di conteggio di parole Apache Beam. Le istruzioni nelle sezioni successive utilizzano WordCount.java.

esegui la pipeline in locale

  • Nella shell o nel terminale, esegui la pipeline WordCount in locale dalla directory word-count-beam:
    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 directory word-count-beam. Contengono parole univoche del testo di input e il numero di occorrenze di ogni parola.

Esegui la pipeline sul servizio Dataflow

  • Nella shell o nel terminale, crea ed esegui la pipeline WordCount sul servizio Dataflow dalla directory word-count-beam:
    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: l'ID del tuo progetto Google Cloud
    • BUCKET_NAME: il nome del bucket Cloud Storage
    • REGION: una regione Dataflow, come us-central1

Visualizza i tuoi risultati

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

    Vai a Job

    La pagina Job mostra i dettagli di tutti i job disponibili, incluso lo stato. Inizialmente lo stato del job wordcount è In esecuzione, quindi viene aggiornato in Riuscito.

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

    Vai a Bucket

    La pagina Bucket mostra l'elenco di tutti i bucket di archiviazione nel 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.

Esegui la pulizia

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

Elimina il progetto

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

  1. Nella console Google Cloud, 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 del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina le singole risorse

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

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

    Vai a Bucket

  2. Fai clic sulla casella di controllo relativa al bucket da eliminare.
  3. Per eliminare il bucket, fai clic su Elimina e segui le istruzioni.
  4. Revoca i ruoli che hai concesso all'account di servizio predefinito di Compute Engine. Esegui il comando seguente una volta per ognuno 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 delle credenziali locale.

    gcloud auth application-default revoke
  6. Facoltativo: revoca le credenziali dallgcloud CLI.

    gcloud auth revoke

Passaggi successivi