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:
Na Google Cloud consola, aceda à página Dataflow > Tarefas.
Selecione uma tarefa.
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).
Cada caixa contém as seguintes informações:
Status; uma das seguintes opções:
- Em execução: o passo está em execução
- Na fila: o passo numa tarefa FlexRS está na fila
- Succeeded: o passo foi concluído com êxito
- Parado: o passo parou porque a tarefa parou
- Desconhecido: o passo não comunicou o estado
- Falhou: o passo não foi concluído
O número de fases da tarefa que executam este passo
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, comoParDo.
Python
- O Dataflow pode usar um nome que atribui quando aplica a transformação. Pode definir o nome da transformação especificando o argumento
labelda 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, comoParDo.
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
DoFnestrutural, quer a partir do nome da função se estiver a usar umDoFnfuncional.
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.
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:
|
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:
|
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?
- Veja informações detalhadas sobre os passos da tarefa
- Veja as fases da tarefa no separador Detalhes da execução
- Resolva problemas do pipeline