In questo tutorial crei una pipeline che utilizza i contenitori personalizzati con librerie C++ per eseguire un flusso di lavoro HPC Dataflow altamente parallelo. Utilizza questo tutorial per scoprire come utilizzare Dataflow e Apache Beam per eseguire applicazioni di calcolo distribuito su rete che richiedono la distribuzione dei dati alle funzioni in esecuzione su molti core.
Il tutorial mostra come eseguire prima la pipeline utilizzando il metodo Corsa diretta e quindi utilizzando Esecutore Dataflow. Puoi testarla eseguendo la pipeline in locale prima di eseguirne il deployment.
Questo esempio utilizza le funzioni e le associazioni Cython della libreria GMP. Indipendentemente dalla libreria o dallo strumento di associazione che utilizzi, puoi applicare lo stesso principi per la tua pipeline.
Il codice di esempio è disponibile su GitHub.
Obiettivi
Crea una pipeline che utilizzi container personalizzati con librerie C++.
Crea un'immagine container Docker utilizzando un Dockerfile.
Pacchettizza il codice e le dipendenze in un container Docker.
Esegui la pipeline in locale per testarla.
Esegui la pipeline in un ambiente distribuito.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
- Artifact Registry
- Cloud Build
- Cloud Storage
- Compute Engine
- Dataflow
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
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 Cloud Storage, Cloud Storage JSON, Compute Engine, Dataflow, Resource Manager, Artifact Registry, and Cloud Build APIs:
gcloud services enable compute.googleapis.com
dataflow.googleapis.com storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.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 Cloud Storage, Cloud Storage JSON, Compute Engine, Dataflow, Resource Manager, Artifact Registry, and Cloud Build APIs:
gcloud services enable compute.googleapis.com
dataflow.googleapis.com storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.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
Crea un account di servizio worker gestito dall'utente per la nuova pipeline e concedi le necessarie ruoli all'account di servizio.
Per creare l'account di servizio, esegui il comando
gcloud iam service-accounts create
:gcloud iam service-accounts create parallelpipeline \ --description="Highly parallel pipeline worker service account" \ --display-name="Highly parallel data pipeline access"
Concedi i ruoli all'account di servizio. Esegui il comando seguente una volta per ciascuno dei seguenti ruoli IAM:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.reader
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:parallelpipeline@PROJECT_ID.iam.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
Sostituisci
SERVICE_ACCOUNT_ROLE
con ogni singolo ruolo.Concedi al tuo Account Google un ruolo che ti consenta di creare token di accesso per l'account di servizio:
gcloud iam service-accounts add-iam-policy-binding parallelpipeline@PROJECT_ID.iam.gserviceaccount.com --member="user:EMAIL_ADDRESS" --role=roles/iam.serviceAccountTokenCreator
Scarica l'esempio di codice e cambia le directory
Scarica l'esempio di codice e poi cambia le directory. Gli esempi di codice nel repository GitHub forniscono tutto il codice necessario per eseguire questa pipeline. Quando è tutto pronto per creare la tua pipeline, puoi utilizzare questo codice campione come modello.
Clona il repository beam-cpp-example.
Usa il comando
git clone
per clonare il repository GitHub:git clone https://github.com/GoogleCloudPlatform/dataflow-sample-applications.git
Passa alla directory dell'applicazione:
cd dataflow-sample-applications/beam-cpp-example
Codice pipeline
Puoi personalizzare il codice della pipeline da questo tutorial. Questa pipeline completa le seguenti attività:
- Produce dinamicamente tutti i numeri interi in un intervallo di input.
- Esegue i numeri interi attraverso una funzione C++ e filtra i valori errati.
- Scrive i valori errati in un canale laterale.
- Conta l'occorrenza di ogni momento di interruzione e normalizza i risultati.
- Stampa l'output, formatta e scrivendo i risultati in un file di testo.
- Crea un
PCollection
con un singolo elemento. - Elabora il singolo elemento con una funzione
map
e passa la frequenzaPCollection
come input aggiuntivo. - Elabora
PCollection
e produce un singolo output.
Il file iniziale ha il seguente aspetto:
Configurazione dell'ambiente di sviluppo
Utilizza l'SDK Apache Beam per Python.
Installa la libreria GMP:
apt-get install libgmp3-dev
Per installare le dipendenze, utilizza il file
requirements.txt
.pip install -r requirements.txt
Per compilare le associazioni Python, esegui il seguente comando.
python setup.py build_ext --inplace
Puoi personalizzare il file requirements.txt
da questo tutorial. Il file di avvio include le seguenti dipendenze:
Esegui la pipeline in locale
L'esecuzione della pipeline in locale è utile per i test. Se esegui la pipeline in locale, puoi verificare che funzioni e si comporti come previsto prima di eseguirne il deployment in un ambiente distribuito.
Puoi eseguire la pipeline in locale utilizzando il comando seguente.
Questo comando genera un'immagine denominata out.png
.
python pipeline.py
Crea le risorse Google Cloud
Questa sezione spiega come creare le risorse seguenti:
- un bucket Cloud Storage da utilizzare come posizione di archiviazione temporanea un percorso di output.
- Un container Docker per pacchettizzare il codice e le dipendenze della pipeline.
Crea un bucket Cloud Storage
Inizia creando un bucket Cloud Storage utilizzando Google Cloud CLI. Questo bucket viene utilizzato come posizione di archiviazione temporanea Dataflow.
Per creare il bucket, utilizza il
comando gcloud storage buckets create
:
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
Sostituisci quanto segue:
- BUCKET_NAME: un nome per il tuo Cloud Storage che soddisfa i requisiti requisiti di denominazione dei bucket. I nomi dei bucket Cloud Storage devono essere univoci a livello globale.
- LOCATION: il location del bucket.
Crea e crea un'immagine container
Puoi personalizzare il Dockerfile di questo tutorial. Il file di base è simile al seguente:
Questo Dockerfile contiene i comandi FROM
, COPY
e RUN
, che puoi trovare nel riferimento Dockerfile.
Per caricare gli artefatti, crea un repository Artifact Registry. Ogni repository può contenere elementi per un singolo formato supportato.
Tutti i contenuti del repository vengono criptati utilizzando chiavi di proprietà di Google e gestite da Google o chiavi di crittografia gestite dal cliente. Per impostazione predefinita, Artifact Registry utilizza chiavi di proprietà di Google e gestite da Google e non è richiesta alcuna configurazione per questa opzione.
Devi disporre almeno dell'accesso come autore di Artifact Registry al repository.
Esegui questo comando per creare un nuovo repository. Il comando utilizza il flag
--async
e restituisce immediatamente il risultato, senza attendere il completamento dell'operazione in corso.gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=LOCATION \ --async
Sostituisci
REPOSITORY
con un nome per il tuo repository. Per ogni posizione del repository in un progetto, i nomi dei repository devono essere univoci.Crea il Dockerfile.
Affinché i pacchetti facciano parte del container Apache Beam, devi specificarli come parte del file
requirements.txt
. Assicurati di non specificaapache-beam
nell'ambito direquirements.txt
. Il contenitore Apache Beam contiene giàapache-beam
.Prima di poter eseguire il push o il pull delle immagini, configura Docker per autenticare le richieste per Artifact Registry. Per configurare l'autenticazione nei repository Docker, esegui il seguente comando:
gcloud auth configure-docker LOCATION-docker.pkg.dev
Il comando aggiorna la configurazione Docker. Ora puoi connetterti con Artifact Registry nel tuo progetto Google Cloud per eseguire il push delle immagini.
Crea il Docker utilizzando
Dockerfile
con Cloud Build.Aggiorna il percorso nel comando seguente in modo che corrisponda al Dockerfile che che hai creato. Questo comando crea il file ed esegue il push al repository Artifact Registry.
gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/cpp_beam_container:latest .
Pacchettizzazione del codice e delle dipendenze in un container Docker
Per eseguire questa pipeline in un ambiente distribuito, pacchettizza il codice e le dipendenze in un container Docker.
docker build . -t cpp_beam_container
Dopo aver pacchettizzato il codice e le dipendenze, puoi eseguire la pipeline localmente per testarla.
python pipeline.py \ --runner=PortableRunner \ --job_endpoint=embed \ --environment_type=DOCKER \ --environment_config="docker.io/library/cpp_beam_container"
Questo comando scrive l'output all'interno dell'immagine Docker. Per visualizzare l'output, eseguire la pipeline con
--output
e scrivere l'output in un di sincronizzare la directory di una VM con un bucket. Ad esempio, esegui il seguente comando.python pipeline.py \ --runner=PortableRunner \ --job_endpoint=embed \ --environment_type=DOCKER \ --environment_config="docker.io/library/cpp_beam_container" \ --output=gs://BUCKET_NAME/out.png
esegui la pipeline.
Ora puoi eseguire la pipeline Apache Beam in Dataflow facendo riferimento al file con il codice della pipeline e passando parametri come richiesto dalla pipeline.
Nella shell o nel terminale, esegui la pipeline con il comando Dataflow Runner.
python pipeline.py \
--runner=DataflowRunner \
--project=PROJECT_ID \
--region=REGION \
--temp_location=gs://BUCKET_NAME/tmp \
--sdk_container_image="LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/cpp_beam_container:latest" \
--experiment=use_runner_v2 \
--output=gs://BUCKET_NAME/out.png
Dopo aver eseguito il comando per eseguire la pipeline, Dataflow restituisce un ID job con lo stato In coda. Potrebbe ci vorranno diversi minuti prima che lo stato del job raggiunga In esecuzione e potrai accedere il grafico del job.
Visualizza i tuoi risultati
Visualizzare i dati scritti nel bucket Cloud Storage. Utilizza la
Comando gcloud storage ls
per elencare i contenuti al livello superiore del bucket:
gcloud storage ls gs://BUCKET_NAME
Se l'esito è positivo, il comando restituisce un messaggio simile al seguente:
gs://BUCKET_NAME/out.png
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto Google Cloud che hai creato per il tutorial.
- 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 riutilizzare il progetto, elimina le risorse che hai creato per il tutorial.
Ripulire le risorse del progetto Google Cloud
Elimina il repository Artifact Registry.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION --async
Elimina il bucket Cloud Storage. Questo bucket da solo non prevede addebiti.
gcloud storage rm gs://BUCKET_NAME --recursive
Revocare le credenziali
Revoca i ruoli che hai concesso all'account di servizio worker gestito dall'utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.reader
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:parallelpipeline@PROJECT_ID.iam.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
- Visualizza l'applicazione di esempio su GitHub.
- Utilizza i container personalizzati in Dataflow.
- Scopri di più sull'utilizzo degli ambienti dei container con Apache Beam.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.