arrow_back

Processamento de dados sem servidor com o Dataflow: modelos Flex personalizados do Dataflow (Java)

Acesse mais de 700 laboratórios e cursos

Processamento de dados sem servidor com o Dataflow: modelos Flex personalizados do Dataflow (Java)

Laboratório 2 horas universal_currency_alt 5 créditos show_chart Avançado
info Este laboratório pode incorporar ferramentas de IA para ajudar no seu aprendizado.
Acesse mais de 700 laboratórios e cursos

Informações gerais

Um pipeline que aceita parâmetros de linha de comando é muito mais útil do que um que tenha esses parâmetros codificados. No entanto, executar esse tipo de pipeline exige a criação de um ambiente de desenvolvimento. Usar um modelo do Dataflow é uma opção ainda melhor para pipelines que serão executados novamente por vários usuários ou em contextos distintos.

Existem muitos modelos de Dataflow que já foram criados como parte do Google Cloud Platform. É possível saber mais sobre eles em Comece a usar o Google. No entanto, nenhum deles executa a mesma função que o pipeline deste laboratório. Em vez disso, nesta etapa você vai converter o pipeline em um modelo Flex do Dataflow novo e personalizado, e não em um modelo tradicional e personalizado.

Converter um pipeline em um modelo Flex e personalizado do Dataflow exige o uso de um Uber JAR para empacotar o código e as dependências, um Dockerfile para descrever qual código será criado, o Cloud Build para gerar o contêiner que será executado no ambiente de execução com o objetivo de criar o job real e, por fim, um arquivo de metadados para descrever os parâmetros do job.

Pré-requisitos

Ter noções básicas sobre o Java.

Conteúdo do laboratório

Neste laboratório, você vai aprender a:

  • converter um pipeline personalizado em um modelo flexível personalizado do Dataflow;
  • executar um modelo flexível do Dataflow.

Configuração e requisitos

Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período e sem custos financeiros.

  1. Faça login no Qwiklabs em uma janela anônima.

  2. Confira o tempo de acesso do laboratório (por exemplo, 1:15:00) e finalize todas as atividades nesse prazo.
    Não é possível pausar o laboratório. Você pode reiniciar o desafio, mas vai precisar refazer todas as etapas.

  3. Quando tudo estiver pronto, clique em Começar o laboratório.

  4. Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.

  5. Clique em Abrir Console do Google.

  6. Clique em Usar outra conta, depois copie e cole as credenciais deste laboratório nos locais indicados.
    Se você usar outras credenciais, vai receber mensagens de erro ou cobranças.

  7. Aceite os termos e pule a página de recursos de recuperação.

Ative o Google Cloud Shell

O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.

O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.

  1. No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.

    Ícone do Cloud Shell em destaque

  2. Clique em Continuar.

O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:

ID do projeto em destaque no terminal do Cloud Shell

A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.

  • Para listar o nome da conta ativa, use este comando:
gcloud auth list

Saída:

Credentialed accounts: - @.com (active)

Exemplo de saída:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • Para listar o ID do projeto, use este comando:
gcloud config list project

Saída:

[core] project =

Exemplo de saída:

[core] project = qwiklabs-gcp-44776a13dea667a6 Observação: a documentação completa da gcloud está disponível no guia com informações gerais sobre a gcloud CLI .

Verifique as permissões do projeto

Antes de começar a trabalhar no Google Cloud, veja se o projeto tem as permissões corretas no Identity and Access Management (IAM).

  1. No console do Google Cloud, em Menu de navegação (Ícone do menu de navegação), selecione IAM e administrador > IAM.

  2. Confira se a conta de serviço padrão do Compute {project-number}-compute@developer.gserviceaccount.com está na lista e recebeu o papel de editor. O prefixo da conta é o número do projeto, que está no Menu de navegação > Visão geral do Cloud > Painel.

Nome da conta de serviço padrão e status do editor do Compute Engine destacados na página com a guia "Permissões"

Observação: se a conta não estiver no IAM ou não tiver o papel de editor, siga as etapas abaixo.
  1. No console do Google Cloud, em Menu de navegação, clique em Visão geral do Cloud > Painel.
  2. Copie o número do projeto, por exemplo, 729328892908.
  3. Em Menu de navegação, clique em IAM e administrador > IAM.
  4. Clique em Permitir acesso, logo abaixo de Visualizar por principais na parte de cima da tabela de papéis.
  5. Em Novos principais, digite:
{número-do-projeto}-compute@developer.gserviceaccount.com
  1. Substitua {project-number} pelo número do seu projeto.
  2. Em Papel, selecione Projeto (ou Básico) > Editor.
  3. Clique em Save.

Configuração do ambiente de desenvolvimento integrado

Neste laboratório, você vai usar principalmente a versão do ambiente de desenvolvimento integrado Theia para Web. Ela é hospedada no Google Compute Engine e contém o repositório do laboratório pré-clonado. Além disso, o Theia oferece suporte de servidor à linguagem Java e um terminal para acesso programático às APIs do Google Cloud com a ferramenta de linha de comando gcloud, similar ao Cloud Shell.

  1. Para acessar o ambiente de desenvolvimento integrado Theia, copie e cole o link mostrado no Google Cloud Ensina em uma nova guia.
Observação: mesmo depois que o URL aparecer, talvez você precise esperar de 3 a 5 minutos para o ambiente ser totalmente provisionado. Até isso acontecer, você verá uma mensagem de erro no navegador.

Painel de credenciais mostrando o ide_url

O repositório do laboratório foi clonado para seu ambiente. Cada laboratório é dividido em uma pasta labs com códigos que você vai concluir e uma pasta solution com um exemplo totalmente funcional para consulta, caso você tenha dificuldades.

  1. Clique no botão File Explorer para conferir:

Menu do Explorador de Arquivos expandido com a pasta Labs destacada

Também é possível criar vários terminais nesse ambiente, como você faria com o Cloud Shell:

Opção de novo terminal destacada no menu Terminal

Outra forma de visualizar é executando gcloud auth list no terminal em que você fez login com uma conta de serviço fornecida. Ela tem as mesmas permissões que a sua conta de usuário do laboratório:

Terminal mostrando o comando gcloud auth list

Se em algum momento o ambiente parar de funcionar, redefina a VM que hospeda o ambiente de desenvolvimento integrado no Console do GCE, conforme este exemplo:

Botão Redefinir e o nome da instância de VM destacados na página Instâncias de VM

Tarefa 1: configurar o pipeline

Vamos usar o código do pipeline atual do laboratório "Como escrever pipelines com ramificações" (pasta de soluções).

Abra o laboratório apropriado

  1. Crie um novo terminal no ambiente de desenvolvimento integrado, caso ainda não tenha feito isso. Depois copie e cole este comando:
# Change directory into the lab cd 2_Branching_Pipelines/labs # Download dependencies mvn clean dependency:resolve export BASE_DIR=$(pwd)
  1. Configurar o ambiente de dados:
# Create GCS buckets and BQ dataset cd $BASE_DIR/../.. source create_batch_sinks.sh # Generate event dataflow source generate_batch_events.sh # Change to the directory containing the practice version of the code cd $BASE_DIR

Clique em Verificar meu progresso para conferir o objetivo. Configure o ambiente de dados

Atualize o código do pipeline

  • Atualize o MyPipeline.java no seu ambiente de desenvolvimento integrado usando o arquivo de solução disponível em 2_Branching_Pipelines/solution/src/main/java/com/mypackage/pipeline:
cp /home/project/training-data-analyst/quests/dataflow/2_Branching_Pipelines/solution/src/main/java/com/mypackage/pipeline/MyPipeline.java $BASE_DIR/src/main/java/com/mypackage/pipeline/

Tarefa 2: criar uma imagem de contêiner para o modelo Flex personalizado do Dataflow

  1. Para concluir esta tarefa, primeiro adicione este plug-in (em inglês) ao seu arquivo pom.xml. Ele ativa a criação de um Uber JAR. Adicione o seguinte valor na tag de propriedades:
<maven-shade-plugin.version>3.2.3</maven-shade-plugin.version>
  1. Em seguida, adicione este valor na tag dos plug-ins do build:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>${maven-shade-plugin.version}</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> </transformers> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
  1. Agora é possível criar um arquivo Uber JAR usando este comando:
cd $BASE_DIR mvn clean package

Anote o tamanho. Esse arquivo Uber JAR tem todas as dependências incorporadas.

  1. É possível executar esse arquivo como um aplicativo autônomo, sem dependências externas de outras bibliotecas.
ls -lh target/*.jar
  1. No mesmo diretório do arquivo pom.xml, crie um arquivo chamado Dockerfile com o texto abaixo. Defina FLEX_TEMPLATE_JAVA_MAIN_CLASS como o nome completo da classe e YOUR_JAR_HERE como o Uber JAR que você criou.
FROM gcr.io/dataflow-templates-base/java11-template-launcher-base:latest # Define the Java command options required by Dataflow Flex Templates. ENV FLEX_TEMPLATE_JAVA_MAIN_CLASS="YOUR-CLASS-HERE" ENV FLEX_TEMPLATE_JAVA_CLASSPATH="/template/pipeline.jar" # Make sure to package as an uber-jar including all dependencies. COPY target/YOUR-JAR-HERE.jar ${FLEX_TEMPLATE_JAVA_CLASSPATH}
  1. Em seguida, você vai usar o Cloud Build para descarregar a criação desse contêiner em vez de criá-lo localmente. Primeiro, ative o armazenamento em cache para tornar os builds futuros mais ágeis:
gcloud config set builds/use_kaniko True
  1. Em seguida, execute o build real. Isso vai adicionar todo o diretório a um arquivo tar, incluindo o Dockerfile com instruções sobre o que deve ser criado. Depois disso, o serviço vai receber o arquivo, e um contêiner será criado e enviado ao Google Container Registry no seu projeto para ser usado no futuro.
export TEMPLATE_IMAGE="gcr.io/$PROJECT_ID/my-pipeline:latest" gcloud builds submit --tag $TEMPLATE_IMAGE .

Também é possível monitorar o status do build na IU do Cloud Build. Além disso, você pode ver que o contêiner resultante foi enviado para o Google Container Registry.

Clique em Verificar meu progresso para ver o objetivo. Crie uma imagem de contêiner para o modelo Flex personalizado do Dataflow

Tarefa 3: criar e organizar o modelo Flex

Para executar um modelo, é preciso criar um arquivo de especificação no Cloud Storage com todas as informações necessárias para executar o job, como metadados e informações do SDK.

  1. Para concluir esta tarefa, crie um arquivo metadata.json no formato abaixo, que considera todos os parâmetros de entrada esperados pelo pipeline.

Consulte a solução se precisar. Para isso, é necessário escrever seus próprios parâmetros de verificação de regex. Embora não seja uma prática recomendada, ".*" será uma correspondência em qualquer entrada.

{ "name": "Your pipeline name", "description": "Your pipeline description", "parameters": [ { "name": "inputSubscription", "label": "Pub/Sub input subscription.", "helpText": "Pub/Sub subscription to read from.", "regexes": [ "[-_.a-zA-Z0-9]+" ] }, { "name": "outputTable", "label": "BigQuery output table", "helpText": "BigQuery table spec to write to, in the form 'project:dataset.table'.", "is_optional": true, "regexes": [ "[^:]+:[^.]+[.].+" ] } ] }
  1. Em seguida, crie e organize o modelo real:
export TEMPLATE_PATH="gs://${PROJECT_ID}/templates/mytemplate.json" # Will build and upload the template to GCS # You may need to opt-in to beta gcloud features gcloud beta dataflow flex-template build $TEMPLATE_PATH \ --image "$TEMPLATE_IMAGE" \ --sdk-language "JAVA" \ --metadata-file "metadata.json"
  1. Verifique se o arquivo foi enviado para o local do modelo no Cloud Storage.

Clique em Verificar meu progresso para ver o objetivo. Crie e organize o modelo Flex

Tarefa 4: executar o modelo usando a interface

Para concluir esta tarefa, siga as instruções abaixo:

  1. Acesse a página do Cloud Dataflow no Console do GCP.
  2. Clique em Criar job usando um modelo.
  3. Digite um nome de job válido no campo Nome do job.
  4. Selecione Modelo personalizado no menu suspenso Modelo do Cloud Dataflow.
  5. Digite o caminho do Cloud Storage para o arquivo de modelo no campo adequado.
  6. Insira os itens relevantes em Parâmetros obrigatórios.
  7. Cliquem em Executar job.
Observação: não é preciso especificar um bucket de testes, porque o DataFlow vai usar o número do seu projeto para criar um bucket privado, que vai ficar com a seguinte aparência: gs://dataflow-staging-us-central1-/staging.
  1. Analise o console do Compute Engine. Será exibida uma VM inicializadora temporária que foi criada para executar o contêiner e iniciar o pipeline com os parâmetros fornecidos.

Tarefa 5: executar o modelo usando a gcloud

Um dos benefícios de usar modelos do Dataflow é a capacidade de executá-los em vários contextos diferentes de um ambiente de desenvolvimento. Para demonstrar isso, use a gcloud para executar um modelo do Dataflow na linha de comando.

  1. Para concluir esta tarefa, execute este comando no seu terminal, modificando os parâmetros conforme apropriado:
export PROJECT_ID=$(gcloud config get-value project) export REGION='us-central1' export JOB_NAME=mytemplate-$(date +%Y%m%H%M$S) export TEMPLATE_LOC=gs://${PROJECT_ID}/templates/mytemplate.json export INPUT_PATH=gs://${PROJECT_ID}/events.json export OUTPUT_PATH=gs://${PROJECT_ID}-coldline/ export BQ_TABLE=${PROJECT_ID}:logs.logs_filtered gcloud beta dataflow flex-template run ${JOB_NAME} \ --region=$REGION \ --template-file-gcs-location ${TEMPLATE_LOC} \ --parameters "inputPath=${INPUT_PATH},outputPath=${OUTPUT_PATH},tableName=${BQ_TABLE}"
  1. Verifique se o pipeline foi concluído corretamente.

Clique em Verificar meu progresso para ver o objetivo. Execute o modelo pela IU e usando a gcloud

Finalize o laboratório

Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.

Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.

O número de estrelas indica o seguinte:

  • 1 estrela = muito insatisfeito
  • 2 estrelas = insatisfeito
  • 3 estrelas = neutro
  • 4 estrelas = satisfeito
  • 5 estrelas = muito satisfeito

Feche a caixa de diálogo se não quiser enviar feedback.

Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.

Copyright 2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.

Antes de começar

  1. Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
  2. Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
  3. No canto superior esquerdo da tela, clique em Começar o laboratório

Usar a navegação anônima

  1. Copie o nome de usuário e a senha fornecidos para o laboratório
  2. Clique em Abrir console no modo anônimo

Fazer login no console

  1. Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
  2. Aceite os termos e pule a página de recursos de recuperação
  3. Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto

Este conteúdo não está disponível no momento

Você vai receber uma notificação por e-mail quando ele estiver disponível

Ótimo!

Vamos entrar em contato por e-mail se ele ficar disponível

Um laboratório por vez

Confirme para encerrar todos os laboratórios atuais e iniciar este

Use a navegação anônima para executar o laboratório

Para executar este laboratório, use o modo de navegação anônima ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.