Información sobre las cargas de trabajo altamente paralelas de HPC de Dataflow

Las cargas de trabajo altamente paralelas, también conocidas como cargas de trabajo embarazosamente paralelas, son habituales en empresas de finanzas, medios y ciencias biológicas. Para cargas de trabajo paralelas como estas, las empresas suelen implementar un clúster de nodos de computación. Cada nodo puede llevar a cabo tareas de procesamiento independientes en una configuración denominada computación en cuadrícula. Para procesar datos de cargas de trabajo paralelas, puedes usar Apache Beam con Dataflow. Para obtener más información sobre Apache Beam, consulta la guía de programación de Apache Beam.

Usar Dataflow para cargas de trabajo altamente paralelas ofrece muchas ventajas.

  • Crea un flujo de trabajo totalmente gestionado con procesamiento de datos y orquestación en la misma canalización.
  • Usa un único sistema para todos los aspectos de la canalización, tanto para el preprocesamiento como para el posprocesamiento y para el procesamiento de tareas. Incluso puedes usar tu código C++ en la canalización.
  • Usa el procesamiento exacto integrado que ofrece Dataflow.

Además, Dataflow incluye varias funciones de seguridad:

Estas cargas de trabajo requieren que los datos se distribuyan a funciones que se ejecutan en muchos núcleos. Esta distribución suele requerir lecturas de simultaneidad muy altas seguidas de una gran difusión de datos, que absorben los sistemas posteriores. Las competencias principales de Dataflow son la distribución de cargas de trabajo por lotes y de streaming entre los recursos, así como la gestión del autoescalado y el restablecimiento dinámico del equilibrio de trabajo en estos recursos. Por lo tanto, cuando usas Dataflow para tus cargas de trabajo altamente paralelas, las necesidades de rendimiento, escalabilidad, disponibilidad y seguridad se gestionan automáticamente.

Incorporar código externo a tu flujo de trabajo

Actualmente, Apache Beam tiene SDKs integrados para Java, Python y Go. Sin embargo, muchas cargas de trabajo altamente paralelas usan código escrito en C++. Puedes usar Dataflow y otros servicios de Google Cloud Platform para ejecutar archivos binarios (bibliotecas) de C++ como código externo con Apache Beam. Incluir archivos binarios de C++ te permite desbloquear estos tipos de cargas de trabajo con servicios totalmente gestionados. También te permite crear flujos de procesamiento completos mediante un sofisticado grafo acíclico dirigido (DAG).

El mismo enfoque para ejecutar archivos binarios de C++ también se aplica al código escrito en otros lenguajes en los que se puede compilar un archivo binario independiente.

Flujos de procesamiento integrales altamente paralelos

Con Dataflow, puedes realizar el procesamiento de lectura/escritura de E/S, el análisis y la salida de tareas en el mismo flujo de procesamiento, lo que te permite ejecutar flujos de procesamiento completos altamente paralelos.

Por ejemplo, una carga de trabajo de HPC altamente paralela podría incluir los siguientes pasos:

  1. Ingiere datos sin procesar de fuentes internas y externas. Los datos pueden proceder de fuentes ilimitadas o limitadas. Las fuentes ilimitadas se convierten principalmente en fuentes limitadas para adaptarse a las tecnologías que se usan en la agricultura de tareas.

  2. Preprocesa los datos sin procesar para que tengan una forma y una codificación que pueda usar el componente de agricultura de tareas.

  3. Usa un sistema para distribuir los cálculos a los hosts y recuperar datos de una fuente. Después, materializa los resultados para analizarlos posteriormente.

  4. Realiza un análisis posterior para convertir los resultados en datos de salida.

Puedes usar Dataflow para gestionar todos estos pasos en una sola canalización y, al mismo tiempo, aprovechar las funciones de Dataflow:

  • Como un único sistema se encarga de todas las fases, no necesitas un sistema de orquestación externo para coordinar la ejecución de varias canalizaciones.

  • Con la localidad de los datos, no es necesario materializar y desmaterializar explícitamente entre los límites de la fase, lo que aumenta la eficiencia.

  • Gracias a la telemetría mejorada del sistema, se puede acceder a información sobre el total de bytes de la fase, lo que ayuda a diseñar las fases posteriores.

  • Con el autoescalado, cuando los datos están en el sistema, los recursos se escalan en función de los volúmenes de datos a medida que estos se mueven por las fases de la canalización.

El flujo de procesamiento altamente paralelo de HPC de Dataflow usa motores de ejecución de DAG modernos. Todos los procesos típicos de una canalización se pueden completar en un solo DAG y, por lo tanto, en una sola canalización de Dataflow. Puedes usar un DAG generado por Apache Beam para definir la forma de la canalización.

Si vas a migrar de un sistema de granja de tareas a un flujo de trabajo altamente paralelo, debes pasar de las tareas a los datos. Un PTransform contiene un DoFn, que tiene una función de proceso que recibe un elemento de datos. El punto de datos puede ser cualquier objeto con una o varias propiedades.

Si usas un DAG y una sola canalización, puedes cargar todos los datos del sistema durante todo el flujo de trabajo. No es necesario que envíes datos a bases de datos ni a almacenamiento.

Componentes de Google Cloud Platform usados con flujos de trabajo altamente paralelos

Las aplicaciones de computación de cuadrícula requieren que los datos se distribuyan a las funciones que se ejecutan en muchos núcleos. Este patrón suele requerir lecturas de alta simultaneidad y, a menudo, se sigue de una gran difusión de datos absorbidos por los sistemas posteriores.

Dataflow se integra con otros servicios gestionados de Google Cloud Platform que pueden absorber E/S de datos paralelos a gran escala:

  • Pub/Sub: almacén de columnas anchas para el almacenamiento en caché y el servicio
  • Bigtable: servicio de ingestión de flujo de eventos global
  • Cloud Storage: almacenamiento de objetos unificado
  • BigQuery: servicio de almacén de datos a escala de petabytes

Si se usan conjuntamente, estos servicios ofrecen una solución atractiva para cargas de trabajo altamente paralelas.

Una arquitectura habitual para cargas de trabajo altamente paralelas que se ejecutan en Google Cloud Platform incluye lo siguiente:

  • El ejecutor de Dataflow para Apache Beam. Este ejecutor distribuye el trabajo a los nodos de la cuadrícula con un flujo de procesamiento derivado de un DAG. Un único DAG de Apache Beam te permite definir flujos de procesamiento complejos de varias fases en los que las fases de flujo de procesamiento paralelas se pueden volver a unir mediante entradas secundarias o uniones.

  • Cloud Storage. Este servicio proporciona una ubicación para organizar los archivos binarios de C++. Cuando se deben almacenar archivos grandes, como en muchos casos prácticos de contenido multimedia, esos archivos también se encuentran en Cloud Storage.

  • Bigtable, BigQuery y Pub/Sub. Estos servicios se usan como fuentes y como receptores.

En el siguiente diagrama se muestra la arquitectura general de un flujo de trabajo de ejemplo.

Arquitectura de una solución de computación en malla

También puedes usar otros sistemas de almacenamiento. Para obtener más información, consulta la lista de sistemas de almacenamiento y fuentes de streaming en la página de entrada/salida de la canalización de la documentación de Apache Beam.

El ejecutor de Dataflow para Apache Beam

Usa Dataflow para transformar y enriquecer tus datos en los modos de streaming y por lotes. Dataflow se basa en Apache Beam.

Cloud Storage

Cloud Storage es un sistema de almacenamiento de objetos unificado que abarca el suministro de datos activos, las analíticas de datos, el aprendizaje automático y el archivado de datos. Para cargas de trabajo altamente paralelas con Dataflow, Cloud Storage proporciona acceso a archivos binarios de C++. En algunos casos prácticos, Cloud Storage también proporciona la ubicación de los datos que necesita la fase de procesamiento.

Para las cargas de trabajo de alta intensidad que requiere la computación de cuadrícula, debes conocer las características de rendimiento de Cloud Storage. Para obtener más información sobre el rendimiento del servicio de datos de Cloud Storage, consulta las directrices sobre porcentaje de solicitudes y distribución de acceso en la documentación de Cloud Storage.

Bigtable

Bigtable es un servicio de base de datos NoSQL de alto rendimiento optimizado para grandes cargas de trabajo analíticas y operativas. Bigtable es complementario a Dataflow. Las características principales de Bigtable, como las lecturas y escrituras de baja latencia (6 ms en el percentil 90), le permiten gestionar miles de clientes simultáneos y cargas de trabajo con picos elevados. Estas funciones hacen que Bigtable sea ideal como receptor y como fuente de datos en la función DoFn durante la fase de procesamiento de Dataflow.

BigQuery

BigQuery es un almacén de datos para empresas rápido, económico y totalmente gestionado que permite realizar análisis de datos a gran escala. Los resultados de la cuadrícula se suelen usar para hacer análisis y te permiten ejecutar agregaciones a gran escala en los datos de salida de la cuadrícula.

Pub/Sub

Pub/Sub es un servicio de mensajería asíncrono y escalable que desacopla los servicios que producen mensajes de los servicios que los procesan. Puedes usar Pub/Sub para las analíticas en tiempo real y los flujos de procesamiento de integración de datos para ingerir y distribuir datos. Es igual de eficaz como middleware orientado a la mensajería para la integración de servicios o como cola para paralelizar tareas.

El DAG de Dataflow

El SDK de Apache Beam te permite crear DAGs expresivos, lo que a su vez te permite crear flujos de procesamiento de varias fases o por lotes. El movimiento de datos lo gestiona el ejecutor, y los datos se expresan como objetos PCollection, que son colecciones de elementos paralelos inmutables.

En el siguiente diagrama se muestra este flujo.

Flujo con DAG

El SDK de Apache Beam te permite definir un DAG. En el DAG, puedes incluir código definido por el usuario como funciones. Normalmente, se usa el mismo lenguaje de programación (Java, Python o Go) tanto para la declaración del DAG como para el código definido por el usuario. También puedes usar código que no esté integrado, como C++, para el código definido por el usuario.

Siguientes pasos

  • Consulta las prácticas recomendadas para trabajar con las canalizaciones altamente paralelas de HPC de Dataflow.

  • Sigue el tutorial para crear una canalización que use contenedores personalizados con bibliotecas de C++.