Ingesta, es mas que una mudanza de datos

La Ingesta de datos es el primer paso y una de las piezas fundamentales en una Arquitectura Big Data. Sin embargo, se puede dar el caso de que uno tienda a pensar, que se trata “solamente” de una copia o mudanza de datos entre distintos sistemas. Pero ¡ojo! No es así, no darle la importancia adecuada, y no dedicar tiempo a todo lo que conlleva, puede ocasionar una verdadera indigestión de datos en tu sistema Big Data.

¿Qué se entiende por Ingesta de Datos?

La ingesta de datos es el proceso mediante el cual se introducen datos, de diferentes fuentes, estructura y/o características dentro de otro sistema de almacenamiento o procesamiento de datos.
Fuente: OpenBigData
Es sin duda, el primer paso que ha de tenerse en cuenta a la hora de diseñar una arquitectura Big Data, para lo cual, hay que tener muy claro, no solamente el tipo y fuente de datos, sino cual es el objetivo final y que se pretende conseguir con ellos. Por lo tanto, en este punto, hay que realizar un análisis concienzudo , porque es la base para determinar las tecnologías que compondrán tu arquitectura Big Data…recordar que no queremos construir sistemas con una mala base…
Fuente: Taringa

Entonces, ¿Qué factores hay que tener en cuenta?

A la hora de analizar cual seria la tecnología y arquitectura adecuada para realizar la ingesta de datos en tu sistema Big Data, has de tener en cuenta los siguientes factores:

Origen y formato de los datos

En este punto, habría que hacer varias preguntas:
  • ¿Cual va a ser el origen u orígenes  de los datos?
  • ¿Provienen de sistemas externos o internos?
  • ¿Serán datos estructurados o datos sin estructura?
  • ¿Cuál es el volumen de los datos? Volumen diario, y plantear como seria la primera carga de datos.
  • ¿Existe la posibilidad de que mas adelante se incorporen nuevas fuentes de datos?
De forma que con esta información, se empezarían a valorar los tipos de conectores que habría que tener, así como valorar dependiendo del volumen del dato, la escalabilidad que debe tener el sistema. También es el momento de pensar cómo seria y que supondría la incorporación de una nueva fuente de datos al sistema.

Latencia/Disponibilidad

En este punto se trata de tener claro cuanto tiempo debe pasar desde que los datos se ingestan hasta que puedan ser utilizables.  Esta información se debe tener en cuenta a la hora de decidir cual será el método de extracción, el destino de los datos y los conectores a utilizar, ya que existen tecnologías que son Batch, donde la latencia puede estar en horas o días, o tecnologías real-time, donde la latencia se mide en microsegundos.  Cuanto menor latencia deba tener la información, mas dificultad tendrá la implementación de la tecnología a emplear.

Actualizaciones

Otro aspecto para tener en cuenta es si la información de las fuentes origen se modifican habitualmente o no. Y en caso de esa información sea modificada con frecuencia, hay que analizar que estrategia se debe seguir con la información que ya haya sido ingestada, es decir, ¿se podría almacenar toda la información y guardar un histórico de cambios?  o bien, ¿habría que modificar la información que se tiene? Y cual es la mejor estrategia, ¿mediante updates, o deletes+insert? Dependerá de la latencia que se quiera obtener, así como de las posibilidades que ofrezca el destino final de los datos seleccionado.

Transformaciones

Será también necesario analizar si va a ser necesario realizar transformaciones durante el proceso de ingesta (transformaciones al vuelo) o no. El proceso de transformación debe considerar la latencia que se incorpora al sistema, ya que puede afectar a la latencia objetivo del sistema ya que transformaciones complejas pueden afectar al rendimiento para obtener la información en real-time. Y otro aspecto a valorar en este punto, es que al realizar transformaciones la información final no será un espejo de la información inicial, aspecto que debe tenerse en cuenta en la estrategia de actualización de datos que se haya seleccionado.

 Destino de los datos

A la hora de seleccionar el destino final, hay que tener en cuenta aspectos como:
  • ¿Será necesario enviar los datos a mas de un destino, por ejemplo, HDFS y Cassandra?
  • ¿Como se van a utilizar los datos en el destino? ¿como serán las querys a utilizar? ¿serán búsquedas aleatorias o no?
  • ¿Qué procesos de transformación de datos se van a realizar una vez ingestados los datos?
  • ¿Cual es la frecuencia y actualización de los datos origen?
Esto afecta a la hora de decidir el particionado o bucketing de los datos, así como la herramienta a utilizar para realizar la consulta sobre los datos(Hive, Cassandra, HBase…), y tiene mucho que ver en la latencia y disponibilidad de la información a la hora de la ingesta o tratamiento de la información.

Estudio de los datos

Otros factores a tener en cuenta:
  • Calidad de los datos, revisar los datos son fiables, es decir, si están bien informados, o si existen duplicados. Por ello, al igual que en el caso de las actualizaciones, hay que pensar que hacer, si por ejemplo llevarlos tal cual a nuestro sistema Big Data, o mas bien, limpiar los datos en la medida de lo posible, para intentar tener unos datos con calidad.
  • Seguridad de los datos. Hay que tener en cuenta si existen datos que sean sensibles o confidenciales, en cuyo caso, habría que ver si se deben enmascaran o directamente no volcarlos al sistema, todo dependiendo del objetivo final.

Tecnologías de ingesta de datos

Una vez que se ha realizado el análisis de toda la información, y se tenga claro cual es el objetivo final, llega la hora de diseñar la arquitectura Big Data.  Para ello, una buena táctica es enfrentar las distintas tecnologías disponibles y ver que aportan con respecto al análisis realizado previamente. Se disponen de muchas soluciones tecnológicas para la realización de ingesta de datos, y, de hecho, algunas soluciones no son “puras” de ingestas, sino que se puede ingestar y procesar datos a la vez. A continuación, se enumera alguna de estas tecnologías:
  • Transferencia Básica de Ficheros a HDFS
    • Apache Flume
    • Apache Kafka
    • Logstash
    • Fluentd
    • Sqoop
    • Apache NiFi
    • Apache Spark
Cada una de ellas tiene sus pros/contras en relación con los aspectos considerados en el punto anterior. Por ello, es necesario realizar un estudio de esos pros/contras en relación con los objetivos, para diseñar la arquitectura que mejor se adapte a tus necesidades, y que el sistema final sea un sistema sólido que sea inmune a las indigestiones de los datos. En próximos artículos estudiaremos ventajas y desventajas de alguna de estas tecnologías con respecto a los factores que hemos comentado para que sirva de ayuda a la hora de diseñar la arquitectura a implementar.