Fluxo de trabalho usando o Cloud Functions

Antes de começar

Se você ainda não tiver feito isso, configure um projeto do Google Cloud e dois (2) buckets do Cloud Storage.

Criar o projeto

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, 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.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs Dataproc, Compute Engine, Cloud Storage, and Cloud Functions .

    Ative as APIs

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  8. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  9. Ative as APIs Dataproc, Compute Engine, Cloud Storage, and Cloud Functions .

    Ative as APIs

  10. Instale a CLI do Google Cloud.
  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init

Criar ou usar dois (2) buckets do Cloud Storage no projeto

Você precisará de dois buckets do Cloud Storage no projeto: um para arquivos de entrada e outro para saída.

  1. No console do Cloud, acesse a página Buckets do Cloud Storage.

    Acessar a página "Buckets"

  2. Clique em Criar bucket.
  3. Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima etapa, clique em Continuar.
  4. Clique em Criar.

Criar um modelo de fluxo de trabalho

Copie e execute os comandos listados abaixo em uma janela de terminal local ou no Cloud Shell para criar e definir um modelo de fluxo de trabalho.

Observações:

  • Os comandos especificam a região "us-central1". É possível especificar uma região diferente ou excluir a sinalização --region, se tiver executado gcloud config set compute/region anteriormente para definir a propriedade da região.
  • A sequência "- " (traço traço espaço) transmite argumentos para o arquivo jar. O comando wordcount input_bucket output_dir executará o aplicativo de contagem de palavras do jar em arquivos de texto contidos no input_bucket do Cloud Storage e enviará arquivos de contagem de palavras de saída para um output_bucket. Você parametrizará o argumento do bucket de entrada da contagem de palavras para permitir que sua função forneça esse argumento.

  1. Crie o modelo de fluxo de trabalho.

    gcloud dataproc workflow-templates create wordcount-template \
        --region=us-central1
    

  2. Adicione o job de contagem de palavras ao modelo de fluxo de trabalho.
    1. Especifique o output-bucket-name antes de executar o comando (a função fornecerá o bucket de entrada). Depois que você inserir o nome do bucket de saída, o argumento do bucket de saída deverá ler da seguinte maneira: gs://your-output-bucket/wordcount-output".
    2. O ID da etapa "count" é obrigatório e identifica o job do Hadoop adicionado.

    gcloud dataproc workflow-templates add-job hadoop \
        --workflow-template=wordcount-template \
        --step-id=count \
        --jar=file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
        --region=us-central1 \
        -- wordcount gs://input-bucket gs://output-bucket-name/wordcount-output
    

  3. Use um cluster gerenciado de nó único para executar o fluxo de trabalho. O Dataproc criará o cluster, executará o fluxo de trabalho nele e excluirá o cluster quando o fluxo de trabalho for concluído.

    gcloud dataproc workflow-templates set-managed-cluster wordcount-template \
        --cluster-name=wordcount \
        --single-node \
        --region=us-central1
    

  4. Clique no nome do wordcount-template na página Fluxos de trabalho do Dataproc no console do Google Cloud para abrir a página Detalhes do modelo de fluxo de trabalho. Confirme os atributos do modelo de contagem de palavras.

Parametrizar o modelo de fluxo de trabalho.

Parametrize a variável do bucket de entrada que será transmitida para o modelo de fluxo de trabalho.

  1. Exporte o modelo do fluxo de trabalho para um arquivo de texto wordcount.yaml para parametrização.
    gcloud dataproc workflow-templates export wordcount-template \
        --destination=wordcount.yaml \
        --region=us-central1
    
  2. Usando um editor de texto, abra wordcount.yaml e adicione um bloco parameters ao final do arquivo YAML para que o INPUT_BUCKET_URI do Cloud Storage possa ser transmitido como args[1] para o binário de contagem de palavras quando o fluxo de trabalho for acionado.

    Veja abaixo um exemplo de arquivo YAML exportado. Você pode adotar uma das duas abordagens para atualizar seu modelo:

    1. Copie e cole o arquivo inteiro para substituir o wordcount.yaml exportado depois de substituí-lo your-output_bucket pelo nome do bucket de saída, OU
    2. Copie e cole apenas a seção parameters no final do arquivo wordcount.yaml exportado.
    .
    jobs:
    - hadoopJob:
        args:
        - wordcount
        - gs://input-bucket
        - gs://your-output-bucket/wordcount-output
        mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
      stepId: count
    placement:
      managedCluster:
        clusterName: wordcount
        config:
          softwareConfig:
            properties:
              dataproc:dataproc.allow.zero.workers: 'true'
    parameters:
    - name: INPUT_BUCKET_URI
      description: wordcount input bucket URI
      fields:
      - jobs['count'].hadoopJob.args[1]
    
  3. Importe o arquivo de texto wordcount.yaml parametrizado. Digite "Y" quando solicitado para substituir o modelo.
    gcloud dataproc workflow-templates import  wordcount-template \
        --source=wordcount.yaml \
        --region=us-central1
    

Criar uma função do Cloud

  1. Abra a página Cloud Functions no console do Google Cloud e clique em CRIAR FUNÇÃO.

  2. Na página Criar função, digite ou selecione as seguintes informações:

    1. Nome: contagem de palavras
    2. Memória alocada: mantenha a seleção padrão.
    3. Acionador:
      • Cloud Storage
      • Tipo de evento: finalizar/criar
      • Bucket: selecione o bucket de entrada. Consulte Criar um bucket do Cloud Storage no projeto. Quando um arquivo é adicionado a esse bucket, a função aciona o fluxo de trabalho. O fluxo de trabalho executará o aplicativo de contagem de palavras, que processará todos os arquivos de texto no bucket.
    4. Código-fonte:

      • Editor in-line
      • Ambiente de execução: Node.js 8
      • Guia INDEX.JS: substitua o snippet de código padrão pelo código a seguir e edite a linha const projectId para fornecer -your-project-id- (sem um "-" inicial ou final).
      const dataproc = require('@google-cloud/dataproc').v1;
      
      exports.startWorkflow = (data) => {
       const projectId = '-your-project-id-'
       const region = 'us-central1'
       const workflowTemplate = 'wordcount-template'
      
      const client = new dataproc.WorkflowTemplateServiceClient({
         apiEndpoint: `${region}-dataproc.googleapis.com`,
      });
      
      const file = data;
      console.log("Event: ", file);
      
      const inputBucketUri = `gs://${file.bucket}/${file.name}`;
      
      const request = {
        name: client.projectRegionWorkflowTemplatePath(projectId, region, workflowTemplate),
        parameters: {"INPUT_BUCKET_URI": inputBucketUri}
      };
      
      client.instantiateWorkflowTemplate(request)
        .then(responses => {
          console.log("Launched Dataproc Workflow:", responses[1]);
        })
        .catch(err => {
          console.error(err);
        });
      };
      
      • Guia PACKAGE.JSON: substitua o snippet de código padrão pelo código a seguir.
      {
        "name": "dataproc-workflow",
        "version": "1.0.0",
        "dependencies":{ "@google-cloud/dataproc": ">=1.0.0"}
      }
      
      • Função a ser executada: Insert: "startWorkflow".
    5. Clique em CRIAR

Testar a função

  1. Copie o arquivo público rose.txt para o bucket para acionar a função. Insira your-input-bucket-name (o bucket usado para acionar a função) no comando.

    gsutil cp gs://pub/shakespeare/rose.txt gs://your-input-bucket-name
    

  2. Aguarde 30 segundos e execute o comando a seguir para verificar se a função foi concluída.

    gcloud functions logs read wordcount
    
    ...
    Function execution took 1348 ms, finished with status: 'ok'
    

  3. Para ver os registros de função da página da lista Funções no console do Google Cloud, clique no nome da função wordcount e em "VER REGISTROS" na página Detalhes da função.

  4. Veja a pasta wordcount-output no bucket de saída na página Navegador do Storage no console do Google Cloud.

  5. Após a conclusão do fluxo de trabalho, os detalhes do job permanecem no console do Google Cloud. Clique no job count... listado na página Jobs do Dataproc para visualizar os detalhes do job do fluxo de trabalho.

Limpar

O fluxo de trabalho neste tutorial exclui o cluster gerenciado quando o fluxo de trabalho é concluído. Para evitar custos recorrentes, exclua outros recursos associados a este tutorial.

Como excluir um projeto

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Como excluir buckets do Cloud Storage

  1. No Console do Google Cloud, acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Clique na caixa de seleção do bucket que você quer excluir.
  3. Para excluir o bucket, clique em Excluir e siga as instruções.

Como excluir o modelo de fluxo de trabalho

gcloud dataproc workflow-templates delete wordcount-template \
    --region=us-central1

Como excluir a função do Cloud

Abra a página Cloud Functions no console do Google Cloud, marque a caixa à esquerda da função wordcount e clique em EXCLUIR.

A seguir