Usa la interfaz de supervisión de Cloud Dataflow

Cuando ejecutas tu canalización con el servicio administrado de Cloud Dataflow, puedes ver ese trabajo y cualquier otro mediante la interfaz de usuario de supervisión basada en web de Cloud Dataflow. La interfaz de supervisión te permite interactuar y ver tus trabajos de Cloud Dataflow.

Puedes acceder a la interfaz de supervisión de Cloud Dataflow mediante Google Cloud Platform Console. La interfaz de supervisión te puede mostrar la información siguiente:

  • Una lista de todos los trabajos que están en ejecución por el momento en Cloud Dataflow y los trabajos que se ejecutaron en los últimos 30 días
  • Una representación gráfica de cada canalización
  • Detalles sobre el estado de tu trabajo, ejecución y versión del SDK
  • Vínculos a la información sobre los servicios de Google Cloud Platform en ejecución en tu canalización, como Compute Engine y Cloud Storage
  • Cualquier error o advertencia que suceda durante un trabajo

Accede a la interfaz de supervisión de Cloud Dataflow

Para acceder a la interfaz de supervisión de Cloud Dataflow, sigue estos pasos:

  1. Accede a GCP Console.
  2. Selecciona tu proyecto de GCP.
  3. Haz clic en el menú en la esquina superior izquierda.
  4. Dirígete a la sección Big Data (Macrodatos) y haz clic en Dataflow.

Aparece una lista de los trabajos de Cloud Dataflow junto con sus estados, que pueden incluir running (en ejecución), succeeded (finalizado de manera correcta) o failed (con errores). Selecciona un trabajo específico para ver más información sobre esa canalización.

Una lista de trabajos de Cloud Dataflow con trabajos en los estados en ejecución, con errores y finalizado de manera correcta.
Figura 1: Lista de trabajos de Cloud Dataflow en GCP Console con trabajos en los estados de ejecución, con errores y finalizado de manera correcta.

Visualiza una canalización

Cuando seleccionas un trabajo de Cloud Dataflow específico, la interfaz de supervisión muestra información detallada sobre la canalización en ese trabajo. Esta información incluye una representación gráfica de tu canalización a medida que se ejecuta en el servicio de Cloud Dataflow, así como un resumen del trabajo, el registro de trabajo y la información detallada en cada paso en la canalización.

Un trabajo de canalización individual en la interfaz de supervisión de Cloud Dataflow.
Figura 2: Trabajo de canalización individual que se muestra en la interfaz de supervisión de Cloud Dataflow.

La interfaz de supervisión de Cloud Dataflow proporciona una representación gráfica de tu canalización: el grafo de ejecución. El grafo de ejecución de una canalización representa cada una de sus transformaciones como un cuadro que contiene su nombre y algo de información de su estado.

Grafo de ejecución básico

Código de canalización:

Java: SDK 2.x


  // 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()))
         .to(options.getOutput()));

Python


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

Java: SDK 1.x


  // Read the lines of the input text.
  p.apply(TextIO.Read.named("ReadLines").from(options.getInput()))
     // Count the words.
     .apply(new CountWords())
     // Write the formatted word counts to output.
     .apply(TextIO.Write.named("WriteCounts")
         .to(options.getOutput())
         .withNumShards(options.getNumShards()));
Grafo de ejecución:

El grafo de ejecución para una canalización de WordCount como se muestra en la interfaz de supervisión de Cloud Dataflow.

Figura 3: Código de canalización para una canalización WordCount que se muestra en paralelo con el grafo de ejecución resultante en la interfaz de supervisión Cloud Dataflow.

Transformaciones compuestas

En el grafo de ejecución, las transformaciones compuestas contienen varias subtransformaciones anidadas y son expandibles. Las transformaciones compuestas expandibles se marcan con una flecha en el grafo. Haz clic en la fecha para expandir la transformación y visualizar las subtransformaciones en su interior.

Código de canalización:

Java: SDK 2.x


  // 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;
    }
  }

Nota: FormatCounts en la imagen a la derecha no es relevante para este SDK.

Python


# The CountWords Composite Transform inside the WordCount pipeline.
class CountWords(beam.PTransform):

  def expand(self, 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()))

Java: SDK 1.x


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

      // Format each word and count into a printable string.
      PCollection<String> results = wordCounts.apply(
        ParDo.of(new FormatCountsFn()));

      return results;
    }
  }
Grafo de ejecución:

El grafo de ejecución para una canalización de WordCount con la transformación CountWords expandida a fin de mostrar sus transformaciones de componentes.

Figura 4: El código de canalización para los pasos secundarios de la transformación CountWords se muestra en paralelo con el grafo de ejecución expandido para toda la canalización.

Transforma nombres

Cloud Dataflow tiene diversas maneras de obtener el nombre de transformación que se muestra en el grafo de ejecución de supervisión:

Java: SDK 2.x

  • Cloud Dataflow puede usar un nombre que asignas cuando aplicas tu transformación. El primer argumento que aplicas al método apply será tu nombre de transformación.
  • Cloud Dataflow puede deducir el nombre de transformación, ya sea del nombre de clase (si compilaste una transformación personalizada) o el nombre del objeto de tu función DoFn (si usas una transformación básica como ParDo).

Python

  • Cloud Dataflow puede usar un nombre que asignas cuando aplicas tu transformación. Puedes establecer el nombre de transformación si especificas el argumento label de la transformación.
  • Cloud Dataflow puede deducir el nombre de transformación, ya sea del nombre de clase (si compilaste una transformación personalizada) o el nombre del objeto de tu función DoFn (si usas una transformación básica como ParDo).

Java: SDK 1.x

  • Cloud Dataflow puede usar un nombre que asignas cuando aplicas tu transformación. El primer argumento que aplicas al método apply será tu nombre de transformación.
  • Cloud Dataflow puede deducir el nombre de transformación, ya sea del nombre de clase (si compilaste una transformación personalizada) o el nombre del objeto de tu función DoFn (si usas una transformación básica como ParDo).

Tiempo total de ejecución

La interfaz de supervisión de Cloud Dataflow proporciona una métrica llamada Tiempo total de ejecución, que te indica el tiempo que toma cada paso de la canalización. Esta métrica te permite diagnosticar con facilidad a qué parte de tu canalización le lleva más tiempo del que debería, por lo que puedes asegurarte de que tu canalización se ejecuta con la mayor eficiencia de tiempo posible.

Puedes encontrar el tiempo total de ejecución en la pestaña Step (Paso) de la interfaz de supervisión, como se muestra en la imagen siguiente:

Puedes ver el tiempo que le toma a un paso en tu canalización ejecutarse.
Figura 5: La pestaña Paso muestra el tiempo total de ejecución del paso de canalización ExtractUserScore.

Consulta Explicación de la administración del tiempo en las canalizaciones de Cloud Dataflow a fin de obtener un ejemplo que usa la métrica del tiempo total de ejecución para realizar un análisis en detalle de lo que genera que una canalización lleve más tiempo del esperado.

Métricas de entradas complementarias

Las Métricas de entradas complementarias te muestran cómo tus patrones y algoritmos de acceso de entradas complementarias afectan el rendimiento de tu canalización. Cuando tu canalización usa una entrada complementaria, Cloud Dataflow escribe la colección en una capa persistente, como un disco, y tus transformaciones leen desde esta colección persistente. Estas operaciones de lectura y escritura afectan el tiempo de ejecución de tu trabajo.

La interfaz de supervisión de Cloud Dataflow muestra las métricas de entradas complementarias cuando seleccionas una transformación que crea o consume una colección de entrada complementaria. Puedes ver las métricas en la sección Métricas de entradas complementarias de la pestaña Paso.

Transformaciones que crean una entrada complementaria

Si la transformación seleccionada crea una colección de entrada complementaria, la sección Métricas de entradas complementarias muestra el nombre de la colección, junto con las métricas siguientes:

  • Time spent writing: (Tiempo dedicado a la escritura) el tiempo de ejecución empleado para escribir la colección de entradas complementarias.
  • Bytes written: (Bytes escritos) la cantidad total de bytes escritos en la colección de entradas complementarias.
  • Time & bytes read from side input: (Tiempo y bytes leídos de entradas complementarias) una tabla que contiene métricas adicionales para todas las transformaciones que consumen la colección de entradas complementarias llamada consumidores de entradas complementarias.

La tabla de Tiempo y bytes leídos de las entradas complementarias contiene la información siguiente para cada consumidor de entrada complementaria:

  • Side input consumer: (Consumidor de entradas complementarias): nombre de la transformación del consumidor de entradas complementarias
  • Tiempo dedicado a la escritura: tiempo que este consumidor emplea en leer la colección de entradas complementarias.
  • Bytes read: (Bytes leídos) cantidad de bytes que este consumidor lee de la colección de entradas complementarias.

Si tu canalización tiene una transformación compuesta que crea una entrada complementaria, expande la transformación compuesta hasta que veas la subtransformación específica que crea la entrada complementaria. Luego, selecciona esa subtransformación para ver la sección Métricas de entradas complementarias.

En la figura 6, se muestran las métricas de entradas complementarias para una transformación que crea una colección de entrada complementaria.

Puedes seleccionar que la subtransformación y sus métricas de entradas complementarias sean visibles en la pestaña Paso.
Figura 6: El grafo de ejecución tiene una transformación compuesta expandida (MakeMapView). Se selecciona la subtransformación que crea la entrada complementaria (CreateDataflowView) y las métricas de entradas complementarias están visibles en la pestaña Paso.

Transformaciones que consumen una o más entradas complementarias

Si la transformación seleccionada consume una o más entradas complementarias, la sección de las Métricas de entradas complementarias muestra la tabla Tiempo y bytes leídos de las entradas complementarias. Esta tabla contiene la información siguiente para cada colección de entrada complementaria:

  • Colección de entrada complementaria: nombre de la colección de la entrada complementaria.
  • Tiempo dedicado a la escritura: tiempo que la transformación emplea en leer la colección de entradas complementarias.
  • Bytes leídos: cantidad de bytes que la transformación lee de la colección de entradas complementarias.

Si tu canalización tiene una transformación compuesta que lee una entrada complementaria, expande la transformación compuesta hasta que veas la subtransformación específica lee la entrada complementaria. Luego, selecciona esa subtransformación para ver la sección Métricas de entradas complementarias.

En la figura 7, se muestran las métricas de entradas complementarias para una transformación que lee desde una colección de entrada complementaria.

Puedes seleccionar que la transformación y sus métricas de entradas complementarias sean visibles en la pestaña Paso.
Figura 7: La transformación JoinBothCollections lee desde la colección de entrada complementaria. JoinBothCollections se selecciona en el grafo de ejecución y las métricas de entradas complementarias son visibles en la pestaña Paso.

Identifica los problemas de rendimiento de la entrada complementaria

Reiteración es un problema de rendimiento de entrada complementaria común. Si tu entrada complementaria PCollection es demasiado grande, los trabajadores no pueden almacenar en caché toda la colección en la memoria. En consecuencia, los trabajadores deben leer repetidas veces desde la colección de entrada complementaria persistente.

En la figura 8, las métricas de entradas complementarias muestran que el total de bytes leídos desde la colección de entrada complementaria son mucho más grandes que el tamaño de la colección, el total de bytes escritos.

Puedes seleccionar que la transformación y sus métricas de entradas complementarias sean visibles en la pestaña Paso.
Figura 8: Ejemplo de reiteración. La colección de entrada complementaria es de 563 MB y la suma de bytes leídos cuando se consumen las transformaciones es de casi 12 GB.

Si deseas mejorar el rendimiento de esta canalización, vuelve a diseñar tu algoritmo para evitar la iteración o la recuperación de los datos de la entrada complementaria. En el ejemplo siguiente, la canalización crea el producto cartesiano de dos colecciones. El algoritmo itera a través de toda la colección de entrada complementaria para cada elemento de la colección principal. Puedes mejorar el patrón de acceso de la canalización si agrupas en lotes varios elementos de la colección principal. Este cambio reduce la cantidad de veces que los trabajadores deben volver a leer la colección de entrada complementaria.

Otro problema de rendimiento común se puede generar si tu canalización realiza una unión mediante la aplicación de un ParDo con una o más entradas complementarias grandes. En este caso, los trabajadores emplearon un alto porcentaje del tiempo de ejecución de la unión en leer las colecciones de entradas complementarias.

En la figura 9, se muestra un ejemplo de las métricas de entradas complementarias para este problema:

Puedes seleccionar que la transformación y sus métricas de entradas complementarias sean visibles en la pestaña Paso.
Figura 9: La transformación JoinBothCollections tiene un tiempo total de ejecución de 18 min 31 s. Los trabajadores emplean la mayoría del tiempo de ejecución (10 min 3 s) en leer desde la colección de entrada complementaria de 10 GB.

Si deseas mejorar el rendimiento de esta canalización, usa CoGroupByKey, en lugar de las entradas complementarias.

Ajuste de escala automático

El servicio de Cloud Dataflow elige de forma automática la cantidad de instancias de trabajador requeridas para ejecutar tu trabajo de ajuste de escala automático. La cantidad de instancia de trabajador puede cambiar con el tiempo de acuerdo con las necesidades de tu trabajo. Puedes ver esta cantidad y otra información sobre tu trabajo de ajuste de escala automático en la pestaña Resumen.

Puedes ver la cantidad de instancia de trabajador que usó tu canalización de ajuste de escala automático, así como otra información en la pestaña “Resumen”.

Para ver el historial de los cambios del ajuste de escala automático, haz clic en el vínculo See More History (Ver más historial). Se mostrará una ventana emergente con la información sobre el historial de trabajadores de tu canalización.

Para ver el historial de los cambios del ajuste de escala automático, haz clic en el vínculo “Ver más historial”.

Nota: Puedes ver los detalles del ajuste de escala automático sobre canalizaciones de transmisión que se ejecutaron o actualizaron a partir del 12 de diciembre de 2016. Si tu canalización se ejecutó o se actualizó por última vez antes del 12 de diciembre, solo podrás ver los detalles del ajuste de escala automático después de que actualices tu canalización.

Error Reporting

La interfaz de Stackdriver Error Reporting agrega y muestra los errores generados en tus canalizaciones.

El informe de error incluye la información siguiente:

  • Una lista de errores con los mensajes de error
  • La cantidad de veces que sucedió cada error.
  • Un histograma que indica cuándo sucedió cada error.
  • La hora en que sucedió el error más reciente.

Para ver el informe del error de tu canalización, haz clic en el menú Logs (Registros) sobre el grafo de la canalización y, a continuación, en la pestaña Stack Traces (Seguimientos de pila) debajo del grafo de la canalización. En la interfaz de supervisión de Cloud Dataflow, verás un resumen de cada error registrado y la cantidad de veces que sucedió.

Un un resumen de cada error registrado y la cantidad de veces que sucedió.

Para ver más información sobre los errores, haz clic en un resumen de errores. Se te redireccionará a la interfaz de Stackdriver Error Reporting.

Obtén más información sobre los errores en la interfaz Stackdriver Error Reporting.

La interfaz de Stackdriver Error Reporting ofrece funcionalidades adicionales. Consulta Visualiza errores para obtener más información sobre los errores que generan tus canalizaciones.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.