2 - Adquisicion de Datos
2 - Adquisicion de Datos
2 - Adquisicion de Datos
En esta ocasión nos vamos a centrar en los métodos para introducir los datos en nuestro sistema de análisis de Big Data.
Como sabemos, nuestros datos pueden provenir de fuentes muy diversas, desde sistemas de Internet, de herramientas tipo Twitter,
datos astrofísicos, o sea datos de naturalezas muy, muy diversas. Entonces, tenemos que hacer que todos estos datos tan diversos se
puedan integrar en nuestro sistema de almacenamiento, que es HDFS, es el sistema de almacenamiento básico de Hadoop, y tenemos
que utilizar distintas herramientas que, en función del origen de nuestros datos, nos permitan integrar estos datos, ya sea en modo
"batch", es decir procesamiento por lotes, o en modo "streaming", es decir, a medida que se van generando los datos en nuestro sistema
de almacenamiento para, posteriormente, poder ser procesados por nuestro sistema completo.
Vamos a presentar los principios básicos de la adquisición de datos para introducirlos en nuestro sistema de análisis de datos de Hadoop, análisis
de datos en Big Data.
Entonces, nosotros tenemos nuestro entorno que tiene un
hardware básico con un commodity hardware que está utilizando
y tenemos el sistema de archivos el gestor de recursos YARN y
el modelo de programación MapReduce para realizar el análisis
de estos datos.
Y nos van a ir llegando datos de distintas fuentes. Podemos tener
que analizar desde twitts, generados desde Twitter, podemos
estar analizando documentos de texto, podemos estar
analizando el contenido de páginas web, podemos estar
analizando contenido de video, es decir que tenemos muchos
tipos de información diferente que vamos a tener que gestionar.
Entonces tendremos que, esta información que estamos recibiendo, poder llegarla a introducir en nuestro sistema de ficheros. Ahí vamos a realizar
un primero paso que es lo que denominamos la adquisición de datos o en inglés el Data Ingestion, lo que es la ingestión y asimilación de datos
para ir recogiendo estos datos de forma apropiada. Y después realizar un proceso de transporte y colocación de estos datos, Data Collector, para
poder introducir finalmente nuestros datos en nuestro sistema de archivos HDFS, a partir de ahí ya empezar el proceso de anál isis propiamente
de estos datos una vez que los tengamos. colocados en nuestro sistema de ficheros.
Después ya nos acercamos a lo que es el procesamiento en tiempo real y podríamos dividirlo en tres niveles diferentes.
Un primer nivel sería un Near Real-Time Decision Support, es decir un soporte a la decisión casi en tiempo real que ya estaríamos hablando en
una toma de decisiones que estaría rondando pues entre algunos segundos y 2 minutos, es decir, estamos dando una respuesta al sistema en
menos de 2 minutos.
Más rápido tendríamos lo que sería un procesamiento de eventos, un Near Real Time Event Processing, que ya estaríamos hablando de una
escala de tiempo entre 100 milisegundos y 2 segundos. Estamos procesando los eventos, muchos eventos en un tiempo muy corto para dar una
respuesta muy rápida.
Y por último ya tendríamos lo que sería el Real Time que podríamos decir que estamos trabajando en una escala inferior a los 100 milisegundos,
es decir, que estamos procesando bloques de datos a una velocidad muy alta y de esta manera, pues necesitamos darle una respuesta muy rápida
al usuario para que pueda actuar de la forma adecuada.
Por tanto, tenemos que tener en cuenta que para realizar estas
operaciones vamos a tener que afrontar una serie de desafíos.
Y estos datos van a venir en distintos formatos, y se estarán generando cada día a mayor velocidad, con lo cual, tenemos que procesar todos
estos datos de la forma más adecuada y más rápida posible para poder introducirlos rápidamente en nuestro sistema de ficheros. Además, tenemos
que las propias fuentes están en constante evolución, es decir, cada día tenemos elementos más precisos que nos proporcionan mayor información
y, posiblemente, información en un formato diferente. Entonces los datos que se están generando hoy son distintos de los datos que se van a
generar mañana en algunos aspectos. Por ejemplo, en datos médicos, cada vez tenemos más sensores, más marcadores que permiten introducir
nuevos datos sobre la información que se está generando de cada paciente entonces, se tienen que ir adaptando los datos que se van manejando
de los distintos pacientes en este caso en función de la información que se puede proporcionar en cada momento, es decir que los datos
evolucionan dinámicamente.
Además también hay cambios en el mismo formato y en la semántica de los datos, se van introduciendo mayor exactitud, mayor precisión, distintos
modos de explicar las cosas, es decir que los datos en sí también cambian, y además debemos hacer que las aplicaciones hasta cierto punto sean
capaces de trabajar con todos estos datos cambiantes y todos estos formatos cambiantes para seguir siendo útiles, de modo que se tengan que
adaptar a la evolución de los datos y para seguir siendo útiles para los usuarios.
Y, de esta manera, se pueden procesar los datos de una forma más rápida y así, garantizar el flujo estable que se quiere garantizar hacia nuestro
sistema de almacenamiento en función del procedimiento que se vaya utilizando.
Este proceso en el que nosotros tenemos varios canales que están procesando los datos del "source" o fuente, es lo que denominamos que se
produce un "fan-out", es decir, una distribución de los datos.
Como ya sabemos, tenemos nuestro entorno, el ecosistema de Hadoop, y necesitamos importar los datos, integrar datos dentro de lo que es el
sistema de almacenamiento.
Recordemos el paradigma "MapReduce" que es el paradigma básico de Big Data de Hadoop, pues en este caso se va a hacer unas tareas sólo
de "Map-Only", es decir, que se van a ir tomando las filas de las distintas tablas, por los distintos procesos Map que se van a ir generando y cada
una de esas filas de las tablas van a ser transformadas en ficheros de nuestro sistema de almacenamiento HDFS, por ejemplo, de Hadoop. De
esta manera, se van procesando cada una de las tablas de la base de datos, fila a fila, de una manera paralela, de modo que l a transferencia
desde una base de datos relacional a Hadoop va a ser relativamente rápida. Este proceso lo realizan los distintos procesos Map, los "Map Jobs"
en este caso, y vamos a generar los ficheros para su posterior procesamiento con las herramientas de análisis que dispongamos en nuestro
sistema.
En el sentido contrario, también podemos tener el caso en que
tengamos unos ficheros en nuestro sistema Hadoop y deseemos
devolver estos ficheros hacia lo que es el sistema de bases de
datos relacional. En este caso, tendremos que realizar la
operación de una forma muy parecida, vamos a tener que, en
primer lugar, Sqoop va a tener que pedir a la base de datos
relacional, toda la información referente a los metadatos y al
formato de las distintas tablas que estén almacenadas en esta
base de datos y, una vez que ya ha obtenido la información
referente a los datos que van a almacenarse en esa base de
datos, vamos a generar los procesos Map que van a ir tomando
los distintos ficheros que se encuentren en nuestro sistema de
almacenamiento de Big Data, y van a realizar el proceso para
transformar estos ficheros en filas de las tablas de la base de
datos, de modo que se van a ir integrando en la base de datos
estas filas obtenidas a partir de los ficheros que tenemos en
nuestro sistema de almacenamiento en Hadoop, en Big Data, ya
sea HDFS o HBASE, etcétera.
Esto es, fundamentalmente, el modo de operación de la herramienta Sqoop. En otra ocasión posterior, analizaremos su funcionamiento sobre
unos ejemplos y veremos cómo funciona concretamente la transformación de los datos.
De modo que, en general están todos, pero se pueden procesar de una forma más rápida y más eficiente que cuando tenemos un ún ico
consumidor. Esta es fundamentalmente la idea de Kafka, como sistema para gestionar los mensajes y enviarlos a los consumidores. Y en una
ocasión posterior veremos cómo procesamos, algún ejemplo, cómo se realiza la operación con Kafka para gestionar estos mensajes provenientes
de distintas aplicaciones.