Criar um pipeline do Dataflow usando Java
Neste documento, mostramos como configurar seu projeto Google Cloud , criar um exemplo de pipeline criado com o SDK do Apache Beam para Java e executar o pipeline de exemplo no serviço do Dataflow. O pipeline lê um arquivo de texto do Cloud Storage, conta o número de palavras exclusivas no arquivo e grava as contagens de palavras no Cloud Storage. Para uma introdução ao pipeline WordCount, consulte o vídeo Como usar o WordCount no Apache Beam.
Este tutorial requer o Maven, mas também é possível converter o projeto de exemplo do Maven para o Gradle. Para saber mais, consulte Opcional: converter do Maven para o Gradle.
Para seguir as instruções detalhadas desta tarefa diretamente no console do Google Cloud , clique em Orientação:
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore e Cloud Resource Manager:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable dataflow
compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com -
Crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
-
Atribua papéis à sua conta de usuário. Execute o seguinte comando uma vez para cada um dos seguintes papéis do IAM:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Por exemplo,myemail@example.com.ROLE: o papel do IAM concedido à sua conta de usuário.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore e Cloud Resource Manager:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable dataflow
compute_component logging storage_component storage_api bigquery pubsub datastore.googleapis.com cloudresourcemanager.googleapis.com -
Crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
-
Atribua papéis à sua conta de usuário. Execute o seguinte comando uma vez para cada um dos seguintes papéis do IAM:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Por exemplo,myemail@example.com.ROLE: o papel do IAM concedido à sua conta de usuário.
Conceda papéis à 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.adminroles/dataflow.workerroles/storage.objectAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
- Substitua
PROJECT_IDpela ID do seu projeto. - Substitua
PROJECT_NUMBERpelo número do projeto. Para encontrar o número do projeto, consulte Identificar projetos ou use o comandogcloud projects describe. - Substitua
SERVICE_ACCOUNT_ROLEpor cada papel individual.
-
Crie um bucket do Cloud Storage e configure-o da seguinte maneira:
-
Defina a classe de armazenamento como
S(Standard). -
Defina o local de armazenamento como o seguinte:
US(Estados Unidos). -
Substitua
BUCKET_NAMEpor um nome de bucket exclusivo. Não inclua informações sensíveis no nome do bucket já que o namespace dele é global e visível para o público.
gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
-
Defina a classe de armazenamento como
- Copie o seguinte, conforme necessário em uma seção posterior:
- Seu nome do bucket do Cloud Storage.
- O ID do projeto do Google Cloud . Para encontrar esse ID, consulte Como identificar projetos.
- Faça o download e instale a versão 11 do
Kit de desenvolvimento para Java (JDK, na sigla em inglês). (O Dataflow continua
sendo compatível com a versão 8.) Confirme se a variável de ambiente
JAVA_HOMEestá definida e aponta para a instalação do JDK. - Faça o download e instale o Apache Maven seguindo o guia de instalação (links em inglês) para seu sistema operacional específico.
Receber o código do pipeline
O SDK do Apache Beam (em inglês) é um modelo de programação de código aberto para pipelines de processamento de dados. Esses pipelines são definidos usando um programa do Apache Beam, e é possível escolher um executor, como o Dataflow, para executar o pipeline.
- No shell ou no terminal, use o
plug-in de arquétipo do Maven (em inglês) para criar um projeto Maven no computador que
contenha os exemplos
WordCountdo SDK do Apache Beam:mvn archetype:generate \ -DarchetypeGroupId=org.apache.beam \ -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \ -DarchetypeVersion=2.71.0 \ -DgroupId=org.example \ -DartifactId=word-count-beam \ -Dversion="0.1" \ -Dpackage=org.apache.beam.examples \ -DinteractiveMode=falseO comando cria um novo diretório chamado
word-count-beamno diretório atual. O diretórioword-count-beamcontém um arquivopom.xmlsimples e uma série de exemplos de pipelines que contam palavras em arquivos de texto. - Verifique se o diretório
word-count-beamcontém o arquivopom.xml:Linux ou macOS
cd word-count-beam/ ls
A saída é esta:
pom.xml src
Windows
cd word-count-beam/ dir
A saída é esta:
pom.xml src
- Verifique se o projeto Maven contém os pipelines de exemplo:
Linux ou macOS
ls src/main/java/org/apache/beam/examples/
A saída é esta:
DebuggingWordCount.java WindowedWordCount.java common MinimalWordCount.java WordCount.java
Windows
dir src/main/java/org/apache/beam/examples/
A saída é esta:
DebuggingWordCount.java WindowedWordCount.java common MinimalWordCount.java WordCount.java
Para ver uma introdução detalhada aos conceitos do Apache Beam usados nestes exemplos, consulte
o Exemplo de WordCount do Apache Beam. As instruções nas próximas
seções usam
WordCount.java.
Execute o pipeline localmente
- No shell ou terminal, execute o pipeline
WordCountlocalmente a partir do diretórioword-count-beam:mvn compile exec:java \ -Dexec.mainClass=org.apache.beam.examples.WordCount \ -Dexec.args="--output=counts"Os arquivos de saída têm o prefixo
countse são gravados no diretórioword-count-beam. Eles contêm palavras exclusivas do texto de entrada e o número de ocorrências de cada palavra.
Executar o pipeline no serviço do Dataflow
- No shell ou no terminal, crie e execute o pipeline
WordCountno serviço do Dataflow a partir do diretórioword-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"Substitua:
PROJECT_ID: o ID do projeto do Google CloudBUCKET_NAME: o nome do bucket do Cloud StorageREGION: uma região do Dataflow, comous-central1
Ver os resultados
No console Google Cloud , acesse a página Jobs do Dataflow.
Acessar o JobsA página Jobs mostra os detalhes de todos os jobs disponíveis, incluindo o status. O Status do job de wordcount é Em execução primeiro e, em seguida, é atualizado para Concluído.
No console do Google Cloud , acesse a página Buckets do Cloud Storage.
Acessar bucketsA página Buckets exibe a lista de todos os buckets de armazenamento do projeto.
- Clique no bucket de armazenamento que você criou.
A página Detalhes do bucket mostra os arquivos de saída e os arquivos de preparação que foram criados pelo job do Dataflow.
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud e os recursos.
Excluir o projeto
A maneira mais fácil de eliminar o faturamento é excluir o projeto Google Cloud que você criou para o guia de início rápido.
- No console Google Cloud , acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir recursos individuais
Se você quiser manter o projeto Google Cloud usado neste guia de início rápido, exclua os recursos individuais:
- No console do Google Cloud , acesse a página Buckets do Cloud Storage.
- Clique na caixa de seleção do bucket que você quer excluir.
- Para excluir o bucket, clique em Excluir e siga as instruções.
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.adminroles/dataflow.workerroles/storage.objectAdmin
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=SERVICE_ACCOUNT_ROLE
-
Opcional: revogue as credenciais de autenticação que você criou e exclua o arquivo de credenciais local:
gcloud auth application-default revoke
-
Opcional: revogar credenciais da CLI gcloud.
gcloud auth revoke
A seguir
- Saiba mais sobre o modelo de programação para o Apache Beam.
- Saiba como usar o Apache Beam para criar pipelines.
- Trabalhe nos exemplos do WordCount e Mobile Gaming.