Grafici dei job Dataflow

L'interfaccia di monitoraggio di Dataflow fornisce una rappresentazione grafica di ogni job: il grafico del job. Il grafico dei job fornisce anche un riepilogo del job, un log del job e informazioni su ogni passaggio della pipeline.

Per visualizzare il grafico dei job per un job:

  1. Nella console Google Cloud , vai alla pagina Dataflow > Job.

    Vai a Job

  2. Seleziona un lavoro.

  3. Fai clic sulla scheda Grafico dei job.

Il grafico dei job di una pipeline rappresenta ogni trasformazione nella pipeline come una casella. Ogni casella contiene il nome della trasformazione e informazioni sullo stato del job, tra cui:

  • In esecuzione: il passaggio è in esecuzione
  • In coda: il passaggio di un job FlexRS è in coda
  • Riuscito: il passaggio è stato completato correttamente
  • Interrotto: il passaggio è stato interrotto perché il job è stato interrotto
  • Sconosciuto: il passaggio non è riuscito a segnalare lo stato
  • Non riuscito: il passaggio non è stato completato

Per impostazione predefinita, la pagina del grafico del job mostra la visualizzazione Grafico. Per visualizzare il grafico del job come tabella, nella visualizzazione Passaggi del job, seleziona Visualizzazione tabella. La visualizzazione tabella contiene le stesse informazioni in un formato diverso. La visualizzazione tabella è utile nei seguenti scenari:

  • Il tuo job ha molte fasi, il che rende difficile la navigazione nel grafico del job.
  • Vuoi ordinare i passaggi del job in base a una proprietà specifica. Ad esempio, puoi ordinare la tabella in base al tempo totale di esecuzione per identificare i passaggi lenti.

Grafico del job di base

Pipeline Code:

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))

Vai

  // 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)
Grafico del job:

Il grafico di esecuzione di una pipeline WordCount mostrato nell'interfaccia di monitoraggio di Dataflow.

Figura 1: il codice della pipeline per una pipeline WordCount mostrato con il grafico di esecuzione risultante nell'interfaccia di monitoraggio di Dataflow.

Trasformazioni composite

Le trasformazioni composite sono trasformazioni che contengono più trasformazioni secondarie nidificate. Nel grafico dei job, le trasformazioni composite sono espandibili. Per espandere la trasformazione e visualizzare le trasformazioni secondarie, fai clic sulla freccia.

Pipeline Code:

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()))

Vai

  // 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)
  }
Grafico del job:

Il grafico del job per una pipeline WordCount con la trasformazione CountWords espansa
              per mostrare le trasformazioni dei componenti.

Figura 2: il codice della pipeline per i passaggi secondari della trasformazione CountWords. Mostrato con il grafico del job espanso per l'intera pipeline.

Nel codice della pipeline, potresti utilizzare il seguente codice per richiamare la trasformazione composita:

result = transform.apply(input);

Le trasformazioni composite richiamate in questo modo omettono l'annidamento previsto e potrebbero apparire espanse nell'interfaccia di monitoraggio di Dataflow. La pipeline potrebbe anche generare avvisi o errori relativi a nomi unici stabili al momento dell'esecuzione della pipeline.

Per evitare questi problemi, richiama le trasformazioni utilizzando il formato consigliato:

result = input.apply(transform);

Nomi delle trasformazioni

Dataflow offre diversi modi per ottenere il nome della trasformazione mostrato nel grafico dei job di monitoraggio. I nomi delle trasformazioni vengono utilizzati in posizioni visibili pubblicamente, tra cui l'interfaccia di monitoraggio Dataflow, i file di log e gli strumenti di debug. Non utilizzare nomi di trasformazione che includono informazioni personali, come nomi utente o nomi di organizzazioni.

Java

  • Dataflow può utilizzare un nome che assegni quando applichi la trasformazione. Il primo argomento che fornisci al metodo apply è il nome della trasformazione.
  • Dataflow può dedurre il nome della trasformazione dal nome della classe, se crei una trasformazione personalizzata, o dal nome dell'oggetto funzione DoFn, se utilizzi una trasformazione di base come ParDo.

Python

  • Dataflow può utilizzare un nome che assegni quando applichi la trasformazione. Puoi impostare il nome della trasformazione specificando l'argomento label della trasformazione.
  • Dataflow può dedurre il nome della trasformazione dal nome della classe, se crei una trasformazione personalizzata, o dal nome dell'oggetto funzione DoFn, se utilizzi una trasformazione di base come ParDo.

Vai

  • Dataflow può utilizzare un nome che assegni quando applichi la trasformazione. Puoi impostare il nome della trasformazione specificando Scope.
  • Dataflow può dedurre il nome della trasformazione, dal nome della struttura se utilizzi un DoFn strutturale o dal nome della funzione se utilizzi un DoFn funzionale.

Visualizzare le informazioni sul passo

Quando fai clic su un passaggio nel grafico del job, il riquadro Informazioni passaggio mostra informazioni più dettagliate sul passaggio. Per saperne di più, consulta Informazioni sul passaggio del job.