In questo tutorial, crei una pipeline che utilizza container personalizzati con librerie C++ per eseguire un flusso di lavoro Dataflow HPC altamente parallelo. Utilizza questo tutorial per scoprire come utilizzare Dataflow e Apache Beam per eseguire applicazioni di grid computing che richiedono la distribuzione dei dati a funzioni eseguite su più core.
Il tutorial mostra come eseguire la pipeline prima utilizzando Direct Runner e poi utilizzando Dataflow Runner. Eseguendo la pipeline localmente, puoi testarla prima di eseguirne il deployment.
Questo esempio utilizza i binding Cython e le funzioni della libreria GMP. Indipendentemente dalla libreria o dallo strumento di binding che utilizzi, puoi applicare gli stessi principi alla tua pipeline.
Il codice di esempio è disponibile su GitHub.
Obiettivi
Crea una pipeline che utilizza container personalizzati con librerie C++.
Crea un'immagine container Docker utilizzando un Dockerfile.
Crea il pacchetto del codice e delle dipendenze in un container Docker.
Esegui la pipeline in locale per testarla.
Esegui la pipeline in un ambiente distribuito.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- Artifact Registry
- Cloud Build
- Cloud Storage
- Compute Engine
- Dataflow
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- 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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
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 per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon 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_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita le API Cloud Storage, Cloud Storage JSON, Compute Engine, Dataflow, Resource Manager, Artifact Registry e Cloud Build:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable compute.googleapis.com
dataflow.googleapis.com storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com -
Crea 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.
-
Concedi ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/iam.serviceAccountUsergcloud 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.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
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 per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon 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_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita le API Cloud Storage, Cloud Storage JSON, Compute Engine, Dataflow, Resource Manager, Artifact Registry e Cloud Build:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable compute.googleapis.com
dataflow.googleapis.com storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com -
Crea 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.
-
Concedi ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/iam.serviceAccountUsergcloud 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.
Crea un account di servizio worker gestito dall'utente per la nuova pipeline e concedi i ruoli necessari alaccount di serviziot.
Per creare il 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 ruoli al account di servizio. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/dataflow.adminroles/dataflow.workerroles/storage.objectAdminroles/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_ROLEcon ogni singolo ruolo.Concedi al tuo Account Google un ruolo che ti consenta di creare token di accesso per il 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 il esempio di codice e cambia directory
Scarica il esempio di codice e poi cambia 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.
Utilizza il comando
git cloneper clonare il repository GitHub:git clone https://github.com/GoogleCloudPlatform/dataflow-sample-applications.gitPassa alla directory dell'applicazione:
cd dataflow-sample-applications/beam-cpp-example
Codice della 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 gli interi tramite una funzione C++ e filtra i valori errati.
- Scrive i valori errati in un canale laterale.
- Conteggia l'occorrenza di ogni tempo di arresto e normalizza i risultati.
- Stampa l'output, formattando e scrivendo i risultati in un file di testo.
- Crea un
PCollectioncon un singolo elemento. - Elabora il singolo elemento con una funzione
mape passa la frequenzaPCollectioncome input secondario. - Elabora
PCollectione produce un singolo output.
Il file iniziale è simile al seguente:
Configurazione dell'ambiente di sviluppo
Utilizza l'SDK Apache Beam per Python.
Installa la libreria GMP:
apt-get install libgmp3-devPer installare le dipendenze, utilizza il file
requirements.txt.pip install -r requirements.txtPer creare i binding Python, esegui questo comando.
python setup.py build_ext --inplace
Puoi personalizzare il file requirements.txt da questo tutorial. Il file iniziale
include le seguenti dipendenze:
Esegui la pipeline in locale
L'esecuzione della pipeline in locale è utile per i test. Eseguendo la pipeline localmente, puoi verificare che venga eseguita e si comporti come previsto prima di eseguirne il deployment in un ambiente distribuito.
Puoi eseguire la pipeline localmente utilizzando il seguente comando.
Questo comando restituisce un'immagine denominata out.png.
python pipeline.py
Crea le Google Cloud risorse
Questa sezione spiega come creare le seguenti risorse:
- Un bucket Cloud Storage da utilizzare come posizione di archiviazione temporanea e una posizione 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 dalla pipeline 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 bucket Cloud Storage che soddisfi i requisiti di denominazione dei bucket. I nomi dei bucket Cloud Storage devono essere univoci a livello globale.
- LOCATION: la posizione del bucket.
Crea e crea un'immagine container
Puoi personalizzare il Dockerfile di questo tutorial. Il file iniziale è simile al seguente:
Questo Dockerfile contiene i comandi FROM, COPY e RUN, che puoi leggere nel riferimento Dockerfile.
Per caricare gli artefatti, crea un repository Artifact Registry. Ogni repository può contenere artefatti per un singolo formato supportato.
Tutti i contenuti del repository sono criptati utilizzando Google-owned and Google-managed encryption keys o chiavi di crittografia gestite dal cliente. Artifact Registry utilizza Google-owned and Google-managed encryption keys per impostazione predefinita e non è necessaria alcuna configurazione per questa opzione.
Devi disporre almeno dell'accesso di scrittura di Artifact Registry al repository.
Esegui questo comando per creare un nuovo repository. Il comando utilizza il flag
--asynce viene restituito immediatamente, senza attendere il completamento dell'operazione in corso.gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=LOCATION \ --asyncSostituisci
REPOSITORYcon un nome per il repository. Per ogni posizione del repository in un progetto, i nomi dei repository devono essere univoci.Crea il Dockerfile.
Per includere i pacchetti nel container Apache Beam, devi specificarli come parte del file
requirements.txt. Assicurati di non specificareapache-beamcome parte del filerequirements.txt. Il contenitore Apache Beam ha giàapache-beam.Prima di 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 comando seguente:
gcloud auth configure-docker LOCATION-docker.pkg.devIl comando aggiorna la configurazione Docker. Ora puoi connetterti con Artifact Registry nel tuo progetto Google Cloud per eseguire il push delle immagini.
Crea l'immagine Docker utilizzando il tuo
Dockerfilecon Cloud Build.Aggiorna il percorso nel comando seguente in modo che corrisponda al Dockerfile che hai creato. Questo comando crea il file e ne esegue il push nel repository Artifact Registry.
gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/cpp_beam_container:latest .
Pacchettizzare il codice e le dipendenze in un container Docker
Per eseguire questa pipeline in un ambiente distribuito, crea un pacchetto del codice e delle dipendenze in un container Docker.
docker build . -t cpp_beam_containerDopo aver creato il pacchetto del codice e delle 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, esegui la pipeline con
--outpute scrivi l'output in un bucket Cloud Storage. Ad esempio, esegui questo 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 i parametri richiesti dalla pipeline.
Nella shell o nel terminale, esegui la pipeline con 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 del job In coda. Potrebbero essere necessari diversi minuti prima che lo stato del job raggiunga In esecuzione e tu possa accedere al grafico del job.
Visualizza i tuoi risultati
Visualizza i dati scritti nel bucket Cloud Storage. Utilizza il
comando gcloud storage ls
per elencare i contenuti al livello più alto 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.
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina le singole risorse
Se vuoi riutilizzare il progetto, elimina le risorse che hai creato per il tutorial.
Libera spazio per le risorse del progetto Google Cloud
Elimina il repository Artifact Registry.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION --asyncElimina il bucket Cloud Storage e i relativi oggetti. Questo bucket da solo non comporta costi.
gcloud storage rm gs://BUCKET_NAME --recursive
Revocare le credenziali
Revoca i ruoli che hai concesso al account di servizio worker gestito dall'utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/dataflow.adminroles/dataflow.workerroles/storage.objectAdminroles/artifactregistry.reader
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:parallelpipeline@PROJECT_ID.iam.gserviceaccount.com \ --role=SERVICE_ACCOUNT_ROLE
-
(Facoltativo) Revoca le credenziali di autenticazione che hai creato ed elimina il file delle credenziali locale.
gcloud auth application-default revoke
-
(Facoltativo) Revoca le credenziali da gcloud CLI.
gcloud auth revoke
Passaggi successivi
- Visualizza l'applicazione di esempio su GitHub.
- Utilizza container personalizzati in Dataflow.
- Scopri di più sull'utilizzo degli ambienti container con Apache Beam.
- Esplora architetture, diagrammi e best practice di riferimento su Google Cloud. Consulta il nostro Cloud Architecture Center.