Gráficos de tarefas do Dataflow

A interface de monitorização do Dataflow oferece uma representação gráfica de cada tarefa: o gráfico de tarefas. O gráfico de tarefas também fornece um resumo das tarefas, um registo de tarefas e informações sobre cada passo no pipeline.

Para ver o gráfico de tarefas de uma tarefa, siga estes passos:

  1. Na Google Cloud consola, aceda à página Dataflow > Tarefas.

    Aceda a Empregos

  2. Selecione uma tarefa.

  3. Clique no separador Gráfico de tarefas.

Por predefinição, a página do gráfico de tarefas apresenta a vista de gráfico. Para ver o seu gráfico de tarefas como uma tabela, na vista de passos da tarefa, selecione Vista de tabela. A vista de tabela contém as mesmas informações num formato diferente. A vista de tabela é útil nos seguintes cenários:

  • O seu trabalho tem muitas fases, o que dificulta a navegação no gráfico de tarefas.
  • Quer ordenar os passos da tarefa por uma propriedade específica. Por exemplo, pode ordenar a tabela por tempo real para identificar passos lentos.

Vista de gráfico

O gráfico de tarefas representa cada transformação no pipeline como uma caixa. A imagem seguinte mostra um gráfico de tarefas com três transformações: Read PubSub Events, 5m Window e Write File(s).

Captura de ecrã do gráfico de tarefas na IU de monitorização

Cada caixa contém as seguintes informações:

Se um passo representar uma transformação composta, pode expandir o passo para ver as subtransformações. Para expandir a etapa, clique na seta Expandir nó.

Transforme nomes

O Dataflow tem várias formas de obter o nome da transformação que é apresentado no gráfico da tarefa de monitorização. Os nomes de transformações são usados em locais visíveis publicamente, incluindo a interface de monitorização do Dataflow, os ficheiros de registo e as ferramentas de depuração. Não use nomes de transformações que incluam informações de identificação pessoal, como nomes de utilizadores ou nomes de organizações.

Java

  • O Dataflow pode usar um nome que atribui quando aplica a transformação. O primeiro argumento que fornece ao método apply é o nome da transformação.
  • O fluxo de dados pode inferir o nome da transformação, quer a partir do nome da classe, se criar uma transformação personalizada, quer do nome do objeto de função DoFn, se usar uma transformação essencial, como ParDo.

Python

  • O Dataflow pode usar um nome que atribui quando aplica a transformação. Pode definir o nome da transformação especificando o argumento label da transformação.
  • O fluxo de dados pode inferir o nome da transformação, quer a partir do nome da classe, se criar uma transformação personalizada, quer do nome do objeto de função DoFn, se usar uma transformação essencial, como ParDo.

Go

  • O Dataflow pode usar um nome que atribui quando aplica a transformação. Pode definir o nome da transformação especificando o Scope.
  • O Dataflow pode inferir o nome da transformação, quer a partir do nome da estrutura se estiver a usar um DoFn estrutural, quer a partir do nome da função se estiver a usar um DoFn funcional.

Veja informações sobre os passos

Quando clica num passo no gráfico de tarefas, o painel Informações do passo mostra mais detalhes sobre o passo. Para mais informações, consulte o artigo Informações sobre os passos do trabalho.

Restrições

Se o Dataflow detetar um gargalo, o gráfico de tarefas mostra um símbolo de alerta nos passos afetados. Para ver a causa do gargalo, clique na etapa para abrir o painel Informações da etapa. Para mais informações, consulte o artigo Resolva problemas de gargalos.

Dois passos de tarefa com alertas de gargalo

Exemplos de gráficos de tarefas

Esta secção mostra alguns exemplos de código de pipeline e os gráficos de tarefas correspondentes.

Gráfico de tarefas básico

Código do pipeline:

Java

  // Read the lines of the input text.
  p.apply("ReadLines", TextIO.read().from(options.getInputFile()))
     // Count the words.
     .apply(new CountWords())
     // Write the formatted word counts to output.
     .apply("WriteCounts", TextIO.write().to(options.getOutput()));

Python

(
    pipeline
    # Read the lines of the input text.
    | 'ReadLines' >> beam.io.ReadFromText(args.input_file)
    # Count the words.
    | CountWords()
    # Write the formatted word counts to output.
    | 'WriteCounts' >> beam.io.WriteToText(args.output_path))

Go

  // Create the pipeline.
  p := beam.NewPipeline()
    s := p.Root()
  // Read the lines of the input text.
  lines := textio.Read(s, *input)
  // Count the words.
  counted := beam.ParDo(s, CountWords, lines)
  // Write the formatted word counts to output.
  textio.Write(s, *output, formatted)
Gráfico de tarefas:

O gráfico de execução de um pipeline WordCount, conforme mostrado na interface de monitorização do Dataflow.

Figura 1: o código do pipeline para um pipeline WordCount apresentado com o gráfico de execução resultante na interface de monitorização do Dataflow.

Gráfico de tarefas com transformações compostas

As transformações compostas são transformações que contêm várias subtransformações aninhadas. No gráfico de tarefas, as transformações compostas são expansíveis. Para expandir a transformação e ver as subtransformações, clique na seta.

Código do pipeline:

Java

  // The CountWords Composite Transform
  // inside the WordCount pipeline.

  public static class CountWords
    extends PTransform<PCollection<String>, PCollection<String>> {

    @Override
    public PCollection<String> apply(PCollection<String> lines) {

      // Convert lines of text into individual words.
      PCollection<String> words = lines.apply(
        ParDo.of(new ExtractWordsFn()));

      // Count the number of times each word occurs.
      PCollection<KV<String, Long>> wordCounts =
        words.apply(Count.<String>perElement());

      return wordCounts;
    }
  }

Python

# The CountWords Composite Transform inside the WordCount pipeline.
@beam.ptransform_fn
def CountWords(pcoll):
  return (
      pcoll
      # Convert lines of text into individual words.
      | 'ExtractWords' >> beam.ParDo(ExtractWordsFn())
      # Count the number of times each word occurs.
      | beam.combiners.Count.PerElement()
      # Format each word and count into a printable string.
      | 'FormatCounts' >> beam.ParDo(FormatCountsFn()))

Go

  // The CountWords Composite Transform inside the WordCount pipeline.
  func CountWords(s beam.Scope, lines beam.PCollection) beam.PCollection {
    s = s.Scope("CountWords")

    // Convert lines of text into individual words.
    col := beam.ParDo(s, &extractFn{SmallWordLength: *smallWordLength}, lines)

    // Count the number of times each word occurs.
    return stats.Count(s, col)
  }
Gráfico de tarefas:

O gráfico de tarefas para um pipeline WordCount com a transformação CountWords expandida
              para mostrar as respetivas transformações de componentes.

Figura 2: o código do pipeline para os subpassos da transformação CountWords. Apresentado com o gráfico de tarefas expandido para toda a pipeline.

No código do pipeline, pode usar o seguinte código para invocar a transformação composta:

result = transform.apply(input);

As transformações compostas invocadas desta forma omitem a aninhagem esperada e podem aparecer expandidas na interface de monitorização do Dataflow. O seu pipeline também pode gerar avisos ou erros sobre nomes únicos estáveis no momento da execução do pipeline.

Para evitar estes problemas, invoque as transformações usando o formato recomendado:

result = input.apply(transform);

O que se segue?