Blog

DOMINIO DE BIG DATA CON PROCESAMIENTO DISTRIBUIDO

El procesamiento distribuido es la columna vertebral de Big Data. Cómo almacenar y procesar datos de manera eficiente con una solución escalable es el enfoque en esta parte de mi serie “Aprendizaje de Big Data de la manera correcta”.

Hablaremos sobre la ubicación de datos con HDFS. Y para colmo, te mostraré un ejemplo del mundo real de cómo funciona el procesamiento distribuido con MapReduce.

En la primera parte de la serie, critiqué el problema de la transformación de extracto, la carga (ETL) de las bases de datos SQL y lo difícil que es escalar dichos sistemas. Si te lo perdiste, puedes encontrarlo aquí: Enlace

FINALMENTE, EXPLICÓ EL PROCESAMIENTO DISTRIBUIDO

Lo que significa el procesamiento distribuido es que no está analizando en un solo servidor. Lo haces en paralelo en varias máquinas.

Una configuración distribuida generalmente consiste en un maestro, que está haciendo la gestión de todo el proceso y los esclavos que están haciendo el procesamiento real.

Para procesar datos en paralelo, el maestro necesita cargar los datos, dividirlos en trozos y distribuirlos a los esclavos para su cálculo. Cada esclavo está haciendo los análisis (cálculos) que programó.

OTRA PESADILLA DE ETL

La distribución de datos desde el maestro a los esclavos tiene un defecto importante: como los datos necesarios se almacenan localmente en algún sistema, el maestro debería primero cargarlos desde la fuente y almacenarlos temporalmente.

Este enfoque básicamente crea los mismos problemas que el proceso ETL de las bases de datos SQL. Para conjuntos de datos muy grandes, cargar datos en un solo maestro y distribuirlos a los esclavos es muy ineficiente.

Otro extracto-cuello de botella. ?

DESPERTAR DE LA PESADILLA CON LOCALIDAD DE DATOS A TRAVÉS DE HDFS

El problema de ETL puede evitarse al no usar un almacén de datos central. El almacenamiento de fragmentos de datos localmente en cada esclavo de procesamiento es la clave.

El maestro solo administra qué parte de los datos se almacenan en qué esclavo. Para el procesamiento, el maestro solo necesita decirle a los esclavos qué bloque de datos debe almacenarse en ese nodo.

Esta perfectamente nos lleva a la H adoop D istributed  F ile S istema, HDFS.

La localidad de datos descrita anteriormente es exactamente lo que está haciendo HDFS. Es la base de Hadoop y lo primero que necesita aprender y comprender.

Puede pensar en HDFS como un sistema de archivos real sobre el sistema de archivos en el servidor. La diferencia entre un sistema de archivos normal como NTFS o ext * es que HFDS es un sistema de archivos distribuido.

Esto significa que abarca a todos los esclavos conectados que se llaman nodos de datos. Los archivos almacenados se dividen automáticamente en bloques de 128 MB.

Estos bloques se distribuyen automáticamente a través de la red a los nodos de datos. Cada nodo solo obtiene algunas partes del archivo, dependiendo del tamaño del clúster.

Para no perder algunos datos en caso de un error del servidor, los bloques se replican automáticamente dos veces en algunos otros nodos.

Boom hecho, eso es todo, ¿verdad? Todos los problemas resueltos? Bueno, no del todo.

Muy a menudo necesita procesar los resultados distribuidos para crear un resultado deseado. Una solución sería enviar todos los resultados de los nodos al maestro para su posterior procesamiento.

Pero enviar los resultados de los nodos a un solo maestro es una mala idea. Crea otro cuello de botella.

Si bien los resultados de los nodos deben ser mucho más pequeños que la entrada en bruto, también pueden ser bastante grandes (gigabytes).

Este problema se puede resolver usando MapReduce.

PROCESAMIENTO DISTRIBUIDO CON MAPREDUCE

Desde los primeros días del sistema ecológico de Hadoop, el marco MapReduce es uno de los principales componentes de Hadoop junto con el sistema de archivos HDFS de Hadoop.

Google implementó MapReduce para analizar el contenido html almacenado de sitios web mediante el recuento de todas las etiquetas html y todas las palabras y combinaciones de ellas (por ejemplo, titulares). El resultado se usó para crear el ranking de la página para la Búsqueda de Google.

Fue entonces cuando todos comenzaron a optimizar su sitio web para la búsqueda de Google. La optimización seria del Search Engine fue llevada a cabo. Ese fue el año 2004.

De regreso a nuestro problema ¿Cuál sería la solución para el cuello de botella creado mediante el envío de datos al maestro? Bueno, lo que MapReduce está haciendo es que está procesando los datos en dos etapas.

La fase del mapa y la fase de reducción.

En la fase del mapa, el marco está leyendo datos de HDFS. Cada conjunto de datos se llama registro de entrada.

Luego está la fase de reducción. En la fase de reducción, se realiza el cálculo real y se almacenan los resultados. El objetivo de almacenamiento puede ser una base de datos o respaldar HDFS o alguna otra cosa.

Después de todo, es Java, para que pueda implementar lo que quiera.

La magia de MapReduce es cómo se implementan el mapa y la fase de reducción y cómo ambas fases funcionan juntas.

El mapa y las fases de reducción están paralelas. Lo que eso significa es que tiene múltiples fases de mapa (mapeadores) y reduce fases (reductores) que pueden ejecutarse en paralelo en las máquinas de su clúster.

CÓMO FUNCIONA MAPREDUCE EN REALIDAD

En primer lugar, todo el mapa y el proceso de reducción dependen en gran medida del uso de pares clave / valor. Para eso están los cartógrafos.

En la fase del mapa, los datos de entrada, por ejemplo un archivo, se cargan y transforman en pares clave / valor.

Cuando se completa cada fase del mapa, envía las parejas clave / valor creadas a los reductores donde se ordenan por clave. Esto significa que un registro de entrada para la fase de reducción es una lista de valores de los mapeadores que tienen la misma clave.

Luego, la fase de reducción está haciendo el cálculo de esa clave y sus valores y dando como resultado los resultados.

¿Cuántos mapeadores y reductores puede usar en paralelo? La cantidad de procesos paralelos de asignación y reducción depende de la cantidad de núcleos de CPU que tenga en su clúster. Cada mapeador y cada reductor usa un núcleo.

Esto significa que cuantos más núcleos de CPU tenga, cuantos más mapeadores pueda usar, más rápido se podrá hacer el proceso de extracción. Cuantos más reductores utilice, más rápido se realizará el cálculo real.

Para aclarar esto, he preparado un ejemplo.

UN MUNDO REAL DE INTERNET DE COSAS EJEMPLO

Como dije antes, MapReduce funciona en dos etapas: mapear y reducir. A menudo, estas etapas se explican con una tarea de recuento de palabras.

Personalmente, odio este ejemplo porque contar cosas es trivial y realmente no te muestra qué puedes hacer con MapReduce. Por lo tanto, vamos a utilizar un caso de uso del mundo más real del mundo de Internet de las cosas (IoT).

Las aplicaciones de IoT crean una gran cantidad de datos que deben procesarse. Esta información es generada por sensores físicos que toman medidas, como la temperatura ambiente a las 8:00 en punto.

Cada medida consiste en una clave (la marca de tiempo cuando se tomó la medición) y un valor (el valor real medido por el sensor).

Debido a que generalmente tiene más de un sensor en su máquina o conectado a su sistema, la clave tiene que ser una clave compuesta. Las claves compuestas contienen adicionalmente información sobre el tiempo de medición sobre la fuente de la señal.

Pero, olvidemos las claves compuestas por ahora. Hoy tenemos solo un sensor Cada medición genera pares clave / valor como: Valor de marca de tiempo.

El objetivo de este ejercicio es crear valores diarios promedio de los datos de ese sensor.

CÓMO TRATA MAPREDUCE CON LOS DATOS DE IOT

La imagen a continuación muestra cómo funciona el mapa y el proceso de reducción.

Primero, la etapa del mapa carga datos sin clasificar (registros de entrada) desde la fuente (por ejemplo, HDFS) por clave y valor (clave: 2016-05-01 01:02:03, valor: 1).

Entonces, dado que el objetivo es obtener promedios diarios, la hora: minuto: la segunda información se corta de la marca de tiempo.

Eso es todo lo que sucede en la fase del mapa, nada más.

Después de que se hayan completado todas las fases del mapa paralelo, cada par de clave / valor se envía al único reductor que maneja todos los valores para esta clave en particular.

Cada registro de entrada del reductor tiene una lista de valores y puede calcular (1 + 5 + 9) / 3, (2 + 6 + 7) / 3 y (3 + 4 + 8) / 3. Eso es todo.

¿Qué crees que debes hacer para generar promedios mínimos?

Sí, debes cortar la llave de manera diferente. Entonces necesitarías cortarlo así: “2016-05-01 01:02”. Mantener la información de Hora y minuto en la clave.

Lo que también se puede ver es por qué la reducción de mapas es tan grande para hacer trabajos paralelos. En este caso, nueve mappers podrían hacer la etapa del mapa en paralelo porque cada mapa es independiente de todos los demás.

La etapa de reducción aún podría ser realizada por tres tareas en paralelo. Uno por naranja, azul y otro por verde.

Eso significa que, si su conjunto de datos fuera 10 veces más grande y usted tuviera 10 veces más máquinas, el tiempo para hacer el cálculo sería el mismo.

CÓMO ESCALAR SISTEMAS DE BIG DATA

Escalar un Big Data System de este tipo es bastante fácil. Debido a que el almacenamiento y el procesamiento se distribuyen, todo lo que tiene que hacer es agregar más servidores al clúster.

Al agregar servidores, aumenta la cantidad de discos disponibles, por lo tanto, la capacidad de almacenamiento. Esto también da como resultado más CPU disponibles para una mayor capacidad de procesamiento del clúster.

¿MAPREDUCE ES LO CORRECTO PARA TI? DEBE HABER UNA TRAMPA, ¿VERDAD?

Elegí explicarle el procesamiento distribuido a través de MapReduce porque es fácil de entender. Pero MapReduce no representa procesamiento distribuido. Es solo una implementación.

¿Deberías usarlo o buscar algo más?

MapReduce ha sido inventado para tareas como:

  • Analizar los registros del servidor para descubrir qué ha estado sucediendo
  • Analizar registros de tráfico de red para identificar problemas de red
  • Básicamente cualquier problema que implique contar cosas en archivos muy grandes

Aquí está el problema con MapReduce:

MapReduce tiene una gran restricción: es un proceso de dos pasos, un mapa y una reducción.

Una vez que los datos se procesan a través del mapa y se reduce la fase, se deben almacenar de nuevo.

Si su cálculo no se puede hacer en esos dos pasos, debe hacer todo el proceso nuevamente. Cargue los resultados anteriores del disco y haga otro mapa y reduzca la ejecución porque los resultados no se pueden almacenar en la memoria y luego volver a usar.

Aquí es donde no tiene sentido usar MapReduce en mi opinión.

DISTRIBUIDO EN EL PROCESAMIENTO DE MEMORIA CON APACHE SPARK

Si quieres hacer cosas complejas como el aprendizaje automático, MapReduce no es el arma de tu elección.

Es por eso que le mostraré cómo funciona distribuido en el procesamiento de la memoria con Apache Spark. Repasaremos un ejemplo de Spark donde analizamos el chat de Twitch.tv y hablamos sobre el procesamiento de flujo y lote.

También le mostraré un truco ingenioso sobre cómo puede prototipar trabajos de chispa y visualizar directamente los resultados.

Compartir

Noticiar Recientes