Continuación del Artículo «Big Data, Introducción a Conceptos y Terminología – PARTE I»

4.- Ingiriendo Datos en el Sistema

La ingestión el proceso de tomar datos crudos y agregarlos en el sistema. La complejidad de esta operación depende fuertemente del formato y la calidad de las fuentes de los datos y de cuán lejos estan los datos del estado deseado antes  de procesarlos.

Una forma en que los datos se pueden agregar a los sistemas de Big Data es usando herramientas dedicadas de ingestión. Tecnologías como Apache Sqoop pueden tomar los datos existentes en bases de datos relacionales y agregarlos en una sistema de Big Data. Similarmente, Apache Flume y Apache Chukwa son proyectos diseñados para agregar e importar logs de aplicaciones y servidores. Sistemas de encolamiento como Apache Kafka se pueden utilizar como una interfaz entre varios generadores de datos y el sistema de Big Data. Frameworks de ingestión como Goblin puede ayudar a agregar y normalizar la salida de estas herramientas al final de la cañería de ingestión.

Durante el proceso de ingestión suelen tener lugar algún nivel de análisis, ordenamiento y etiquetado. Este proceso a veces se llama ETL, lo que significa extraer, transformar y cargar. Mientras que usualmente se refiere a los procesos de data warehousing  legados, algunos de los mismos conceptos se aplican al ingreso de datos en un sistema Big Data. Las operaciones típicas pueden incluir modificar el formato de los datos de entrada, categorizarlo y etiquetarlos, filtrar datos innecesarios o en mal estado, o potencialmente validando que los datos adhieren a ciertos requerimientos.

Con estas capacidades en mente, idealmente, los datos capturados se debieran mantener tan crudos como sea posible para una posterior mayor flexibilidad al bajar por la cañería.

 

5.- Persistencia de los Datos en el Almacenamiento

Los procesos de ingestión típicamente sacan los datos hacia el componente externo que gestiona el almacenamiento, de esa forma los datos pueden persistir de forma confiable en el disco. Aunque parece que esta sería una operación simple,  el volumen de los datos de entrada, los requerimientos para disponibilidad, y la capa de computación distribuida hacen necesarios sistemas de almacenamiento más complejos.

Esto usualmente justifica el uso de un sistema de archivos distribuido para el almacenamiento de los datos crudos. El sistema de archivos Apache Hadoop’s HFS  permite que grandes cantidades de datos se escriban a través de múltiples nodos en un cluster. Esto asegura que los datos pueden ser accedidos por los recursos de computación, que los datos puedan ser cargados en la memoria RAM del Cluster para operaciones en-memoria, y se puedan manejar graciosamente las fallas en los componentes. Otros sistemas de archivos distribuidos pueden ser usados en lugar de HFS, incluyendo Ceph GlusterFS.

Los datos también se pueden importar en otros sistemas distribuidos para un accceso más estructurado. Las bases de datos distribuidas, especialmente bases de datos NoSQL, se ajustan bien a este rol debido a que a menudo son diseñadas con las mismas consideraciones de tolerancia a fallos y pueden manejar datos heterogéneos. Hay muchos tipos diferentes de bases de datos distribuidas para elegir dependiendo de cómo se quieran organizar y presentar los datos.

 

6.- Computando y Analizando los Datos

Una vez que los datos están disponibles, el sistema puede comenzar el procesamiento de los  datos para hacer surgir la información relevante. La capa de computación es quizás la parte más diversa del sistema en cuanto a los requerimientos y el mejor enfoque puede variar considerablemente dependiendo de qué tipo de información se deseer conocer. Los datos a menudo son procesados repetitivamente, ya sea mediante una sola herramienta o utilizando un número de herramientas para reflotar diferentes tipos de información.

El procesamiento por lotes (batch) es un método de computación sobre un dataset grande. El proceso involucra romper el trabajo en piezas más pequeñas, distribuyendo cada pieza en una máquina individual, reordenando los datos en base a resultados intermedios, y luego calculando y ensamblando el resultado final. Estos pasos a menudo se refieren individualmente como dividir, mapear, reordenar y ensamblar, o colectivamente como un algoritmo de reducción de mapas distribuido (distribuited map reduce). Esta estrategia es la que utiliza Apache Hadoop’s MapReduce. El procesamiento Batch es más util cuando se trata con datasets muy grandes que requieren muy poca computación.

Mientras el procesamiento Batch calza bien para ciertos tipos de datos y cómputos, otras cargas de trabajo requieren más procesamiento en tiempo-real. El procesamiento el tiempo-real demanda que la información sea procesada y que esté disponible inmediatamente y requiere al sistema reaccionar a medida que la nueva información está disponible. Una forma de lograr esto es el procesamiento de flujos (stream processing), el cual opera en un flujo continuo de datos compuestos de ítem individuales. Otra característica común de los procesadores en tiempo-real es la computación en-memoria, lo que funciona con representaciones de los datos en la memoria del cluster para evitar tener que escribir en disco.

Apache Storm, Apache Flink y Apache Spark, proveen distintos formas de lograr procesamiento el tiempo-real (real-time) o aproximadamente en tiempo-real (near real-time). Hay problemas de trade-off con cada una de estas tecnologías, lo que puede afectar el tipo de enfoque que es mejor para cada problema individual. En general, el procesamiento en tiempo real se ajusta mejor para analizar pequeños trozos de datos que están cambiando o siendo agregados rápidamente al sistema.

Los ejemplos a continuación representan frameworks computacionales. Sin embargo, hay muchas otras formas de computar o de analizar datos dentro de sistemas de Big Data. Estas herramientas generalmente se conectan dentro de los frameworks recien mencionados y proveen interfaces adicionales para interactuar con con las capas subyacentes. Para ejemplo: Apache Hive provee una interfaz con el almacén de datos de HadoopApache Pig provee una interfaz de consultas de alto nivel, mientras que las interacciones tipo-SQL con los datos se pueden lograr con proyectos como Apache DrillApache ImpalaApache Spark SQL y Presto. Para el aprendizaje de máquinas (machine learning), pueden ser útiles proyectos como Apache SystemMLApache Mahout y Apache Spark’s MLib. Para directamente programar análisis hay un amplio soporte en el ecosistema de Big Data, Python y R son opciones populares.

 

6.- Visualizando los resultados

Debido al tipo de información que es procesada por los sistemas de Big Data, reconocer tendencias u otros cambios en los datos a través del tiempo es a menudo más importante que el valor de los mismos. Visualizar datos es una de las formas más útiles de ubicar tendencias y hacer sentido de una gran cantidad de puntos de datos.

El procesamiento en tiempo-real se realiza frecuentemente para visualizar métricas de servidores y aplicaciones. Los datos cambian frecuentemente y grandes variaciones en las métricas típicamente indican impactos en la salud de los sistemas o de la organización. En estos casos, proyectos como Prometheus puede ser útil para el procesamiento de stream de datos como una base de datos de series-de-tiempo (time-series database) y visualizar la información.

Una forma popular de visualizar los datos es usando Elastic Stack, anteriormente llamado ELK Stack. Compuesto por Logstash para la recolección de datos, Elastic Search para la indexación de datos, y Kibana para la visualización, el Elastick Stack se puede utilizar con sistema de Big Data para crear una interfaz visual con los resultados de los cálculos de métrics crudas. Un stack similar se puede lograr con Apache Solr para indexación y el fork de Kibana llamado Banana para la visualización. El stack creado por estas herramientas es llamado Silk.

Otras tecnologías de visualización típicamente utilizada para el trabajo interactivo de Ciencia de Datos (Data Science) es un «cuaderno» (notebook). Estos proyectos permiten la exploración interactiva y visualización de los datos en un formato conducente a compartir, presentar o colaborar. Ejemplos populares de este tipo de interfaz de visualización con Jupyter Notebook y Apache Zeppelin.

 

7.- Glosario de Términos de Big Data

Pese a que hemos intentado definir los conceptos en la forma en que los hemos utilizado a través de la guía, a veces es útil tener toda la terminología técnica especializada en un sólo lugar:

  • Big Data: El término Big Data es un término sombrilla para datasets que no pueden ser razonablemente manipulados mediante computadores tradicionales o herramientas debido a su volumen, velocidad y variedad. Este término es también aplicado típicamente a tecnologías y estrategias para trabajar con este tipo de datos.
  • Batch Processing (Procesamiento por Lotes): El procesamiento por lotes es una estrategia de computación que involucra el procesamiento de datos en conjuntos grandes. Esto es típicamente ideal para trabajo que no sea sensible al tiempo y que opere sobre conjuntos muy grandes de datos. El proceso se inicia en una ocasión posterior
  • Cluster Computing  (Computación en Cluster): La computación en cluster es la práctica de agrupar los recursos de múltiples máquinas y administrar sus capacidades colectivas para completar tareas. Los cluster de computadoras requieren una capa de administración del cluster que manipula la comunicación entre los nodos individuales y coordina la asignación de trabajo.
  • Data Lake (Lago de Datos): Data Lake es un término utilizado para referirse a un gran repositorio de datos recolectados en un estado relativamente crudo. Este término se usa frecuentemente para referirse a los datos recolectados en un sistema de Big Data que podría estar sin estructurar y en frecuente cambio. Esto difiere en espíritu de los Data Warehouses (Almacenes de Datos).
  • Data Mining (Minería de Datos): El Data Mining ( o Minería de Datos) es un término amplio para referirse a la práctica intentar encontrar patrones en Datasets grandes. Es el proceso de intentar refinar la masa de datos hacia un conjunto de información más comprensible y cohesivo.
  • Data Warehouse (Almacén de Datos): Los Data Warehouses (Almacenes de Datos) son repositorios de datos grandes y ordenados, que pueden utilizarse para el análisis y reportería. En contraste con un Data Lake, un Data Warehouse de datos que han sido limpiados, integrados con otras fuentes y en general está bien ordenado. Los Data Warehouses a menudo se mencionan en relación con Big Data, pero típicamente están compuestos de sistemas más tradicionales.
  • ETL (Extract, Transform, Load): El término ETL significa extraer (Extract), transformar (Transform) y Cargar (Load). Se refiere al proceso de tomar los datos crudos y preparlos para el uso de un sistema. Este es tradicionalmente un proceso asociado con Data Warehouses, pero debido a las características de este proceso también es posible encontrarlo en las pipelines (cañerías) de ingestión de sistemas de Big Data.
  • Hadoop: Hadoop es un proyecto Apache que fué tempranamente exitoso en Big Data. Consiste en un sistema de archivos distribuido llamado HDFS, con la administración de cluster (cluster management) y agendamiento de recursos (resource scheduler) encima mediante YARN (Yer Another Resource Negotiator). Las capacidades de procesamiento Batch son proveídas por el motor de computación MapReduce. Otros sistemas de análisis y computación pueden correr en paralelo con MapReduce en los despliegues modernos de Hadoop.
  • In-Memory Computing (Computación en Memoria): In-Memory Computing es una estrategia que involucra el movimiento de datasets en uso enteramente dentro de la memoria colectiva de un cluster. Los cálculos intermedios no son escritos al disco y, en vez de eso, se mantienen en memoria. Esto da a sistemas de In-Memory Computing como Apache Spark una gran ventaja en velocidad sobre sistemas restringidos por I/O como Hadoop’s MapReduce.
  • Machine Learning (Aprendizaje de Máquina): El Machine Learning es el estudio y la práctica del diseño de sistemas que pueden aprender, ajustarse y mejorar basados en los datos con que son alimentados. Esto típicamente involucra la implementación de algoritmos predictivos y estadísticos que pueden concentrarse continuamente en el comportamiento «correcto» y la comprensión mientras más datos fluyan por el sistema.
  • Map Reduce (Big Data Algorithm): Map Reduce (el algoritmo de Big Data, no el motor computacional de Hadoop’s MapReduce) es un algoritmo para agendar trabajo en un cluster de computación. El proceso involucra dividir la estructura del problema (mapeandolo a diferentes nodos) y computar sobre las partes para producir resultados intermedios, reordenando los resultados para alinear conjuntos similares, y luego reduciendo los resultados mediante la emisión de un único valor por cada conjunto.
  • NoSQL: NoSQL es un término amplio referente a las bases de datos diseñadas para fuera del modelo relacional tradicional. Las bases de datos NoSQL tienen diferentes trade-offs (ventajas/desventajas) comparadas con las bases de datos relacionales, pero a menudo se ajustan bien a los sistemas de Big Data debido a su flexibilidad y su frecuente arquitectura tipo primero-distribuida (distribuited-first).
  • Stream Processing (Procesamiento de Flujos): El Stream Processing es la práctica de la computación sobre datos individuales a medida que se mueven por un sistema. Esto permite el análisis en tiempo-real de los datos con que se está alimentando el sistema y es útil para operaciones sensibles al tiempo (time-sensitive) utilizando métricas de alta velocidad.

8.- Conclusión

Big Data es un tópico amplio y de evolución rápida. Mientras que no es recomendable para todos los tipos de computación, muchas organizaciones están moviendose a Big Data para ciertos tipos de trabajos de cargas de trabajo y usándolo para suplementar herramientas existentes de análisis y negocios. Los sistemas de Big Data están unicamente disponibles para detectar patrones difíciles de detectar y para proveer conocimiento en comportamientos que son imposibles de encontrar por medios convencionales. Mediante la correcta implementación de sistemas que tratan Big Data, las organizaciones pueden ganar un increíble valor partiendo de los datos que ya están disponibles.

 

Continuación del Artículo «Big Data, Introducción a Conceptos y Terminología – PARTE I«

Una respuesta a “Big Data, Introducción a Conceptos y Terminología – PARTE II”

  1. […] … Continúa en “Big Data, Introducción a Conceptos y Terminología – PARTE II” […]

Deja un comentario

Trending