Os modelos Flex do Dataflow permitem que você empacote um pipeline do Dataflow para implementação. Neste tutorial, mostramos como criar um modelo Flex do Dataflow e executar um job do Dataflow usando esse modelo.
Objetivos
- Criar um modelo Flex do Dataflow.
- Use o modelo para executar um job do Dataflow.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
- 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, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build API:
gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
-
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, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build API:
gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
-
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
Conceda papéis à conta de serviço padrão do Compute Engine. Execute uma vez o comando a seguir para cada um dos seguintes papéis do IAM:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.writer
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
Substitua:
PROJECT_ID
: ID do projeto;PROJECT_NUMBER
: o número do projetoSERVICE_ACCOUNT_ROLE
: cada papel individual
Prepare o ambiente
Instale o SDK e os requisitos do ambiente de desenvolvimento.
Java
Faça o download e instale a versão 11 do Kit de desenvolvimento para Java (JDK, na sigla em inglês). Confirme se a variável de ambiente
JAVA_HOME
está definida e aponta para a instalação do JDK.Faça o download e instale o Apache Maven seguindo o guia de instalação para seu sistema operacional específico.
Python
Use o SDK do Apache Beam para Python.
Go
Use o Guia de download e instalação do Go para fazer o download e instalar o Go no seu sistema operacional específico. Para saber quais ambientes de execução do Go são compatíveis com o Apache Beam, consulte Suporte ao ambiente de execução do Apache Beam.
Faça o download do exemplo de código.
Java
Clone o repositório
java-docs-samples
.git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Navegue até o exemplo de código deste tutorial.
cd java-docs-samples/dataflow/flex-templates/getting_started
Crie o projeto Java em um arquivo Uber JAR.
mvn clean package
Esse arquivo Uber JAR tem todas as dependências incorporadas. É possível executar esse arquivo como um aplicativo autônomo sem dependências externas em outras bibliotecas.
Python
Clone o repositório
python-docs-samples
.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Navegue até o exemplo de código deste tutorial.
cd python-docs-samples/dataflow/flex-templates/getting_started
Go
Clone o repositório
golang-samples
.git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Navegue até o exemplo de código deste tutorial.
cd golang-samples/dataflow/flex-templates/wordcount
Compile o binário Go.
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wordcount .
crie um bucket do Cloud Storage
Use o comandogcloud storage buckets create
para criar um bucket do Cloud Storage:
gcloud storage buckets create gs://BUCKET_NAME
Substitua BUCKET_NAME
por um nome para o
bucket do Cloud Storage. Os nomes dos buckets do Cloud Storage precisam ser
globalmente exclusivos e atender aos
requisitos de nomenclatura de buckets.
Crie um repositório do Artifact Registry
Crie um repositório do Artifact Registry para enviar a imagem do contêiner do Docker para o modelo.
Use o comando
gcloud artifacts repositories create
para criar um novo repositório do Artifact Registry.gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=LOCATION
Substitua:
- REPOSITORY: um nome para o repositório. Os nomes dos repositórios precisam ser exclusivos para cada local de repositório em um projeto.
- LOCATION: é o local regional ou multirregional do repositório.
Use o comando
gcloud auth configure-docker
para configurar o Docker e autenticar solicitações para o Artifact Registry. Esse comando atualiza a configuração do Docker para que você possa se conectar ao Artifact Registry para enviar imagens.gcloud auth configure-docker LOCATION-docker.pkg.dev
Os modelos Flex também podem usar imagens armazenadas em registros privados. Para mais informações, acesse Usar uma imagem de um registro particular.
Crie o modelo Flex
Nesta etapa, você usa o
comando gcloud dataflow flex-template build
para criar o modelo Flex.
Um modelo Flex consiste nos seguintes componentes:
- Uma imagem de contêiner do Docker que empacota o código do pipeline. Para modelos flexíveis
de Java e Python, a imagem Docker é criada e enviada ao repositório do Artifact Registry
quando você executa o comando
gcloud dataflow flex-template build
. - Um arquivo de especificação de modelo. Esse arquivo é um documento JSON que contém o local da imagem do contêiner, além dos metadados sobre o modelo, como parâmetros de pipeline.
O repositório de amostra no GitHub contém o arquivo metadata.json
.
Para estender seu modelo com outros metadados, crie seu próprio arquivo metadata.json
.
Java
gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-java.json \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-java:latest" \ --sdk-language "JAVA" \ --flex-template-base-image JAVA11 \ --metadata-file "metadata.json" \ --jar "target/flex-template-getting-started-1.0.jar" \ --env FLEX_TEMPLATE_JAVA_MAIN_CLASS="com.example.dataflow.FlexTemplateGettingStarted"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- LOCATION: o local
- PROJECT_ID: o ID do projeto do Google Cloud
- REPOSITORY: o nome do repositório do Artifact Registry que você criou anteriormente
Python
gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-py.json \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-python:latest" \ --sdk-language "PYTHON" \ --flex-template-base-image "PYTHON3" \ --metadata-file "metadata.json" \ --py-path "." \ --env "FLEX_TEMPLATE_PYTHON_PY_FILE=getting_started.py" \ --env "FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE=requirements.txt"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- LOCATION: o local
- PROJECT_ID: o ID do projeto do Google Cloud
- REPOSITORY: o nome do repositório do Artifact Registry que você criou anteriormente
Go
Use o comando
gcloud builds submit
para criar a imagem Docker usando um Dockerfile com o Cloud Build. Esse comando cria o arquivo e o envia para o repositório do Artifact Registry.gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest .
Substitua:
- LOCATION: o local
- PROJECT_ID: o ID do projeto do Google Cloud
- REPOSITORY: o nome do repositório do Artifact Registry que você criou anteriormente
Use o comando
gcloud dataflow flex-template build
para criar um modelo Flex chamadowordcount-go.json
no bucket do Cloud Storage.gcloud dataflow flex-template build gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json \ --image "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest" \ --sdk-language "GO" \ --metadata-file "metadata.json"
Substitua BUCKET_NAME pelo nome do bucket do Cloud Storage criado anteriormente.
Executar o modelo Flex
Nesta etapa, você vai usar o modelo para executar um job do Dataflow.
Java
Use o comando
gcloud dataflow flex-template run
para executar um job do Dataflow que usa o modelo Flex.gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/getting_started-java.json" \ --parameters output="gs://BUCKET_NAME/output-" \ --additional-user-labels "LABELS" \ --region "REGION"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- REGION: a região
- LABELS: opcional. Rótulos anexados ao job usando o formato
<key1>=<val1>,<key2>=<val2>,...
Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.
Se o job for executado com êxito, ele gravará a saída em um arquivo chamado gs://BUCKET_NAME/output--00000-of-00001.txt
no bucket do Cloud Storage.
Python
Use o comando
gcloud dataflow flex-template run
para executar um job do Dataflow que usa o modelo Flex.gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/getting_started-py.json" \ --parameters output="gs://BUCKET_NAME/output-" \ --additional-user-labels "LABELS" \ --region "REGION"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- REGION: a região
- LABELS: opcional. Rótulos anexados ao job usando o formato
<key1>=<val1>,<key2>=<val2>,...
Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.
Se o job for executado com êxito, ele gravará a saída em um arquivo chamado gs://BUCKET_NAME/output--00000-of-00001.txt
no bucket do Cloud Storage.
Go
Use o comando
gcloud dataflow flex-template run
para executar um job do Dataflow que usa o modelo Flex.gcloud dataflow flex-template run "wordcount-go-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json" \ --parameters output="gs://BUCKET_NAME/samples/dataflow/templates/counts.txt" \ --additional-user-labels "LABELS" \ --region "REGION"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- REGION: a região
- LABELS: opcional. Rótulos anexados ao job usando o formato
<key1>=<val1>,<key2>=<val2>,...
Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.
Se o job for executado com êxito, ele gravará a saída em um arquivo chamado gs://BUCKET_NAME/samples/dataflow/templates/count.txt
no bucket do Cloud Storage.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
-
Exclua o bucket do Cloud Storage e todos os objetos nele.
gcloud storage rm gs://BUCKET_NAME --recursive
-
Exclua o repositório do Artifact Registry.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION
-
Revogar os papéis concedidos à conta de serviço padrão do Compute Engine. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.writer
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
A seguir
- Saiba como configurar modelos Flex.
- Confira a lista de modelos fornecidos pelo Google.