La interfaz de monitorización de Dataflow proporciona una representación gráfica de cada tarea: el gráfico de tareas. El gráfico de tareas también proporciona un resumen de las tareas, un registro de tareas e información sobre cada paso de la canalización.
Para ver el gráfico de un trabajo, sigue estos pasos:
En la Google Cloud consola, ve a la página Dataflow > Trabajos.
Selecciona un trabajo.
Haz clic en la pestaña Gráfico de empleo.
De forma predeterminada, en la página del gráfico de tareas se muestra la vista de gráfico. Para ver tu gráfico de tareas como una tabla, en Vista de pasos de la tarea, selecciona Vista de tabla. La vista de tabla contiene la misma información en un formato diferente. La vista de tabla es útil en los siguientes casos:
- Tu trabajo tiene muchas fases, por lo que es difícil desplazarse por el gráfico de trabajo.
- Quieres ordenar los pasos de un trabajo por una propiedad específica. Por ejemplo, puedes ordenar la tabla por tiempo real para identificar los pasos lentos.
Vista de gráfico
El gráfico de tareas representa cada transformación de la canalización como un recuadro. En la siguiente imagen se muestra un gráfico de trabajo con tres transformaciones: Read PubSub Events
, 5m Window
y Write File(s)
.
Cada cuadro contiene la siguiente información:
Estado: uno de los siguientes:
- En ejecución: el paso se está ejecutando.
- En cola: el paso de una tarea de FlexRS está en cola.
- Completada: el paso ha finalizado correctamente.
- Detenido: el paso se ha detenido porque se ha detenido el trabajo.
- Desconocido: el paso no ha podido informar del estado.
- Error: no se ha podido completar el paso
Número de fases de trabajo que ejecutan este paso.
Si un paso representa una transformación compuesta, puedes desplegarlo para ver las subtransformaciones. Para desplegar el paso, haz clic en la flecha Desplegar nodo.
Nombres de las transformaciones
Dataflow ofrece varias formas de obtener el nombre de la transformación que se muestra en el gráfico de monitorización de trabajos. Los nombres de las transformaciones se usan en lugares visibles públicamente, como la interfaz de monitorización de Dataflow, los archivos de registro y las herramientas de depuración. No uses nombres de transformación que incluyan información personal identificable, como nombres de usuario o nombres de organizaciones.
Java
- Dataflow puede usar el nombre que le asignes cuando apliques la transformación. El primer argumento que proporciones al método
apply
es el nombre de la transformación. - Dataflow puede inferir el nombre de la transformación, ya sea a partir del nombre de la clase, si creas una transformación personalizada, o del nombre del objeto de función
DoFn
, si usas una transformación principal comoParDo
.
Python
- Dataflow puede usar el nombre que le asignes cuando apliques la transformación. Para definir el nombre de la transformación, especifica el argumento
label
de la transformación. - Dataflow puede inferir el nombre de la transformación, ya sea a partir del nombre de la clase, si creas una transformación personalizada, o del nombre del objeto de función
DoFn
, si usas una transformación principal comoParDo
.
Go
- Dataflow puede usar el nombre que le asignes cuando apliques la transformación. Puedes definir el nombre de la transformación especificando el
Scope
. - Dataflow puede inferir el nombre de la transformación, ya sea a partir del nombre de la estructura si usas un
DoFn
estructural o del nombre de la función si usas unDoFn
funcional.
Ver información de los pasos
Cuando haces clic en un paso del gráfico de trabajo, el panel Información del paso muestra más detalles sobre el paso. Para obtener más información, consulta Información sobre los pasos de un trabajo.
Cuellos de botella
Si Dataflow detecta un cuello de botella, el gráfico de la tarea muestra un símbolo de alerta Información del paso. Para obtener más información, consulta Solucionar problemas de cuellos de botella.
en los pasos afectados. Para ver la causa del cuello de botella, haz clic en el paso para abrir el panel
Ejemplos de gráficos de tareas
En esta sección se muestra un ejemplo de código de una canalización y los gráficos de trabajo correspondientes.
Gráfico de la tarea básico
Código de la canalización:
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 la tarea:
![]() |
Gráfico de trabajo con transformaciones compuestas
Las transformaciones compuestas son transformaciones que contienen varias subtransformaciones anidadas. En el gráfico de la tarea, las transformaciones compuestas se pueden desplegar. Para desplegar la transformación y ver las subtransformaciones, haz clic en la flecha.
Código de la canalización:
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 la tarea:
![]() |
En el código de tu canalización, puedes usar el siguiente código para invocar tu transformación compuesta:
result = transform.apply(input);
Las transformaciones compuestas invocadas de esta forma omiten el anidamiento esperado y pueden aparecer expandidas en la interfaz de monitorización de Dataflow. Tu canalización también puede generar advertencias o errores sobre nombres únicos estables durante el tiempo de ejecución de la canalización.
Para evitar estos problemas, invoca tus transformaciones con el formato recomendado:
result = input.apply(transform);
Siguientes pasos
- Ver información detallada sobre los pasos de un trabajo
- Ver las fases de un trabajo en la pestaña Detalles de la ejecución
- Solucionar problemas de la canalización