Creare una pipeline Dataflow utilizzando Java
Questo documento mostra come configurare il progetto Google Cloud, creare una pipeline di esempio costruita con l'SDK Apache Beam per Java ed eseguirla nel servizio Dataflow. La pipeline legge un file di testo da Cloud Storage, conteggia il numero di parole univoche nel file e poi ritrascrive i conteggi delle parole in Cloud Storage. Per un'introduzione alla pipeline WordCount, guarda 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 approfondire, consulta (Facoltativo) Convertire da Maven a Gradle.
Per seguire le indicazioni dettagliate per questa attività direttamente nella console Google Cloud, fai clic su Procedura guidata:
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs:
gcloud services enable dataflow
compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com -
Create local authentication credentials for your user account:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs:
gcloud services enable dataflow
compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com -
Create local authentication credentials for your user account:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Concedi i ruoli all'account di servizio predefinito di Compute Engine. 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 tuo progetto. Per trovare il numero del progetto, consulta Identificazione dei progetti o utilizza il comandogcloud projects describe
. - Sostituisci
SERVICE_ACCOUNT_ROLE
con ogni singolo ruolo.
-
Create a Cloud Storage bucket and configure it as follows:
-
Set the storage class to
S
(standard). -
Imposta la posizione di archiviazione su quanto segue:
US
(Stati Uniti). -
Sostituisci
BUCKET_NAME
con un nome di bucket univoco. Non includere informazioni sensibili nel nome del bucket, poiché lo spazio dei nomi dei bucket è globale e visibile pubblicamente. - Copia quanto segue, poiché ti serviranno in una sezione successiva:
- Il nome del bucket Cloud Storage.
- L'ID del tuo progetto Google Cloud. Per trovare questo ID, consulta Identificazione dei progetti.
- Scarica e installa la versione 11 del Java Development Kit (JDK). (Dataflow continuerà
a supportare la versione 8). Verifica che la variabile di ambiente
JAVA_HOME
sia impostata e indichi l'installazione di JDK. - Scarica e installa Apache Maven seguendo la guida all'installazione di Maven per il tuo sistema operativo specifico.
gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
-
Set the storage class to
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 eseguirle.
- 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.61.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 directoryword-count-beam
contiene un semplice filepom.xml
e una serie di pipeline di esempio che conteggiano le parole nei file di testo. - Verifica che la directory
word-count-beam
contenga il filepom.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
- 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 seguenti utilizzano
WordCount.java
.
Esegui la pipeline in locale
- Nella shell o nel terminale, esegui la pipeline
WordCount
localmente dalla directoryword-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 directoryword-count-beam
. Contengono parole univoche del 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 pipeline
WordCount
sul servizio Dataflow dalla directoryword-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
: il tuo ID progetto Google CloudBUCKET_NAME
: il nome del bucket Cloud StorageREGION
: una regione Dataflow, ad esempious-central1
Visualizza i tuoi risultati
Nella console Google Cloud, vai alla pagina Job di Dataflow.
Vai a JobLa pagina Job mostra i dettagli di tutti i job disponibili, incluso lo stato. Lo stato del job wordcount è inizialmente In esecuzione, poi viene aggiornato in Riuscito.
Nella console Google Cloud, vai alla pagina Bucket in Cloud Storage.
Vai a BucketLa pagina Bucket mostra l'elenco di tutti i bucket di archiviazione del progetto.
- Fai clic sul bucket di archiviazione che hai creato.
La pagina Dettagli bucket mostra i file di output e di staging creati dal job Dataflow.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate su 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.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina le singole risorse
Se vuoi mantenere il progetto Google Cloud utilizzato in questa guida rapida, elimina le singole risorse:
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click the checkbox for the bucket that you want to delete.
- To delete the bucket, click Delete, and then follow the instructions.
Revoca i ruoli che hai concesso all'account di servizio predefinito di Compute Engine. 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
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
Passaggi successivi
- Scopri di più sul modello di programmazione Apache Beam.
- Scopri come utilizzare Apache Beam per creare pipeline.
- Consulta gli esempi di WordCount e giochi per dispositivi mobili.