Apache Beam: construyendo Data Pipelines en Python

Apache Beam es una evolución del modelo Dataflow creado por Google para procesar grandes cantidades de datos. Los programas escritos con Apache Beam pueden ejecutarse en diferentes estructuras de procesamiento utilizando un conjunto de IOs diferentes.

Ya hemos hablado aquí sobre otros frameworks como Hadoop, Spark, Flink, Google Cloud Dataflow, etc… Pero no ha habido una API unificada que vincule todos estos marcos y fuentes de datos, y proporcione una abstracción de la lógica de la aplicación desde un gran ecosistema de datos. El framework Apache Beam proporciona una abstracción entre la lógica de su aplicación y el gran ecosistema de datos.

Apache Beam Logic

El SDK de Apache Beam puede ser usado en varios lenguajes como Java, Python, etc… aunque nosotros hemos realizado todas las pruebas con Python. Para poder iniciarnos con Apache Beam necesitamos conocer algunas ideas básicas que se utilizarán más adelante como: Pipeline, PCollection, PTransform, ParDO y DoFn.

  • Pipeline: Una Pipeline encapsula el flujo de trabajo de nuestro procesamiento de datos y de principio a fin. Esto incluye la lectura de los datos de entrada, la transformación de los mismos y la escritura de los datos de salida. Al crear el Pipeline, también se debe especificar las opciones de ejecución que le indican al Pipeline dónde y cómo ejecutarlo. Hemos hablado anteriormente sobre Pipelines mediante Apache NiFi.

  • PCollection: Una PCollection representa un conjunto de datos distribuidos sobre el que opera la Pipeline de Apache Beam. El conjunto de datos puede estar limitado, lo que significa que proviene de una fuente fija como un archivo, o ilimitado, lo que significa que proviene de una fuente de actualización continua a través de una suscripción u otro mecanismo.

  • PTransform: Una PTransform representa una operación de procesamiento de datos, o un paso dentro de la pipeline. Cada PTransform toma uno o más objetos de la PCollection como entrada, realiza una función de procesamiento y produce cero o más objetos de PCollection de salida.

  • ParDo: El paradigma de procesamiento de ParDo es similar a la fase “MapReduce” de un algoritmo de estilo Map/Shuffle/Reduce-style: una transformación de ParDo considera cada elemento como una colección de entrada, realiza alguna función de procesamiento en ese elemento, y emite uno o varios elementos a una colección de salida.

  • DoFn: Un DoFn aplica su lógica en cada elemento de la entrada PCollection y le permite completar los elementos de una salida PCollection.

Apache Beam Runtime

Un beneficio práctico de Apache Beam es que permite reutilizar nuestro código para procesar un flujo entrante, reprocesar datos históricos (por ejemplo, después de arreglar un fallo o recibir un volcado de datos), o realizar experimentos o pruebas con muestras de datos:

Apache Beam Example

Aunque poco a poco vamos testeando e introduciendo en nuestros entornos de Producción aquellas que más nos gustan, tenemos un importante listado de herramientas de streaming, con sus ventajas y desventajas:

  • Apache Spark Streaming
  • Kafka Streams
  • Akka Streams
  • Apache Flink
  • Apache Beam
  • Apache Apex
  • Apache Ignite
  • Apache Gearpump
  • Apache Storm
  • Apache Samza