Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Indice
1.1. - Introducción..................................................................................................................... 2
1.2. - Tipos de Sistemas Distribuidos ....................................................................................... 3
1.2.1 Sistemas de Información .............................................................................................. 3
1.2.2 Sistemas pervasivos (Ubícuos) ..................................................................................... 3
1.2.3 Sistemas de Cómputo de Altas Prestaciones................................................................ 4
1.3. - Sistemas Distribuidos de Computo ................................................................................. 4
1.3.1 Cluster .......................................................................................................................... 4
1.3.2. - Grid ............................................................................................................................ 6
1.3.3 - Cloud .......................................................................................................................... 7
1.4.- Paradigma Map / Reduce ................................................................................................. 8
1.5.- Hadoop.............................................................................................................................. 9
1.5.1 Hadoop Distributed File System ................................................................................. 10
1.5.2 Gestión de trabajos en cluster Hadoop ...................................................................... 10
1.6 Spark ................................................................................................................................. 10
1.6.1 Comparando Hadoop con Spark ................................................................................ 11
1.7 Spark SQL .......................................................................................................................... 11
1.1. - Introducción
Las definiciones no dejan de ser visiones parciales del sistema. «Un sistema en el cual, tanto los
componentes de hardware y software de un computador conectados en red, se comunican y
coordinan mediante paso de mensajes. Tanenbaum que formula, que los Sistemas Distribuidos
son algo más que nodos de cómputo conectados a través de una red, o sistemas que utilizan
mecanismos de paso de mensajes para establecer la comunicación de procesos. Para el usuario
una forma de ver el Sistema, para el ingeniero un conjunto de nodos conectados a través de una
red, más un paradigma que permite construir un sistema coherente a partir de un principio
simple.
Siguiendo el discurso científico, se necesitaría determinar en primer lugar, las causas que han
motivado la aparición y auge de los sistemas distribuidos. Al otro lado de la balanza, la posibilidad
de poder construir sistemas con potencia de cómputo suficiente para abordar la problemática
anterior. En este sentido, sabemos cómo construir sistemas a gran escala, a partir de unidades
de cómputo más pequeñas, e interconectarlas para que trabajen juntas, a través de redes de
interconexión de diferentes tecnologías, ayudadas con middlewares para coordinar todas las
actividades necesarias para la ejecución eficiente de las aplicaciones. No sería adecuado
empezar a describir las ventajas que aportan los sistemas distribuidos frente a los centralizados,
o esgrimir la lista de nuevos retos que se abren a la hora de construir este tipo de sistemas.
Prefiero dejar estos aspectos para algunas de las referencias clásicas que se dedican a esta clase
de comparativas, y centrar nuestros esfuerzos, en intentar profundizar en características de
diseño y nuevas problemáticas a resolver, a la hora de abordar algunos de los nuevos problemas
derivados en este tipo de sistemas.
Después de lo anterior, sería importante plantearse hacia dónde dirigir los esfuerzos a la hora de
implementar el middleware. Las opciones son tantas, que las apuestas del diseñador
determinarán la personalidad de este. Tampoco hay que olvidar, que demasiada transparencia
podría generar ineficiencias en el sistema; o dejar de entender el mismo.
No siempre, por tanto, será deseable la transparencia total de los módulos a seleccionar, que
nos ayuden en la confección de nuestros algoritmos.
1.2. - Tipos de Sistemas Distribuidos
Aunque nuestro interés será centrarnos en los sistemas distribuidos de cómputo, no me resisto
a comentar algunos de los aspectos más relevantes de los sistemas de información y pervasivos.
Los usuarios por lo general son reacios a los cambios, y la adopción de un nuevo paradigma de
programación para la programación de aplicaciones en las nuevas infraestructuras, supone un
desafío que puede frenar el avance de sistemas en este sentido.
1.3.1 Cluster
Intentando sintetizar al máximo; un cluster lo podemos definir como una colección de nodos de
cómputo independientes, conectados a través de una red; que trabajan de manera coordinada
(Sistemas de Imagen Única, SSI), para solucionar un problema, teniendo en cuenta diferentes
requerimientos prestacionales (tiempo de ejecución, throughput, consumo de energía etc).
a (Nodo)
(Cluster
Middleware) b
→
Será función del Sistema Operativo fundamentalmente, y del middleware, figura 1.4 b);
coordinar sus módulos específicos de gestión de recursos a efectos de construir; tanto la interfaz
de usuario, como la infraestructura SSI requerida en este tipo de infraestructura.
Los problemas de diseño asociados a este tipo de sistema giran alrededor de conseguir:
• Escalabilidad • Seguridad
• Tolerancia de fallos • Facilitar la administración y gestión
• Balanceo de carga del mismo
• Interfaces homogéneas
En general, algunas de las características más relevantes de los clusters de HPC se muestran a
continuación:
• Primer cluster construido con computadores personales 1994; con 16 DX4 procesadores
conectados mediante cannel bonded Ethernet. NASA Ames Centre)
• Nodos con mínimos recursos (sin monitor, ratón, tarjeta de vídeo)
• Un nodo servidor (frontend)
• Linux
• Sistema de ficheros compartido
• Herramientas de programación paralela (PVM, MPI)
• Sistemas de gestión de trabajos Batch, interactivos, secuenciales, paralelos
Tal disponibilidad de recursos sin embargo no determina una buena utilización de los mismos,
de hecho; diversos estudios han demostrado la baja utilización de recursos que se tiene en un
entorno de redes de ordenadores dirigido a usuarios con necesidades de interacción. De ahí, los
entornos NOW y COW configuran otro tipo de infraestructuras de cómputo a nivel local para
aprovechar los periodos de inactividad de los nodos individuales que poseen diferentes
instituciones; dotándolas sin coste adicional, de entornos de cómputo con una funcionalidad.
1.3.1.1 Visión de usuario/sistema
Pueden establecerse dos visiones radicalmente distintas, de la infraestructura analizada.
a) Visión de usuario
1.3.2. - Grid
Un Grid lo podríamos definir como un tipo de sistema distribuido que comúnmente se construye
como una federación de sistemas de cómputo, en el que cada uno suele estar bajo un dominio
administrativo distinto, y en los que los componentes de hardware, software y tecnología de red
pueden ser muy diferentes. En el caso que nos ocupa, nos planteamos que hacer cuando
nuestras aplicaciones muestren necesidades de recursos superiores a la disponibilidad de
recursos locales de nuestras infraestructuras. Infraestructuras del tipo multicluster serían las
posibles propuestas al problema planteado Problemas ahora de coscheduling y co-asignación
serían ahora problemáticas a resolver
por el middleware a diseñar. Una de las
características más relevantes de los
sistemas grid estriba, en que los recursos
de distintas organizaciones son
compartidos por un grupo de personas o
instituciones para que colaboren entre si.
Esta colaboración se implementa como una organización virtual, en la que sus miembros tienen
derecho a usar los recursos que provee la organización virtual. Además, también se pueden
compartir otro tipo de recursos que pueden estar conectados a las distintas redes, tales como
telescopios, microscopios, sensores, etc...
1.3.3 - Cloud
La siguiente infraestructura pretende resolver la siguiente problemática. Por lo que, en
determinadas situaciones, la cantidad de recursos de la infraestructura estará
sobredimensionada, existiendo recursos libres infrautilizados. De manera similar, si hay
necesidad de recursos por la necesidad de picos de demanda de solicitudes, el cluster no podrá
atenderlas en general con la calidad de servicio
requerida. Por lo anterior, sería deseable ajustar
las necesidades de recursos de las aplicaciones,
al conjunto de recursos de la infraestructura en
tiempo de ejecución.
Dentro de las características esenciales podemos destacar la solicitud bajo demanda, analizada
anteriormente, la virtualización y la característica de elasticidad.
a.- En relación a la virtualización, podemos observar las posibles alternativas en la imagen que
se adjunta.
Donde a nivel de emulación, se pretende ejecutar una aplicación preparada para una
determinada arquitectura ISA, en otra diferente. Es el nivel más antiguo de virtualización. A nivel
de poder desarrollar máquinas virtuales, se disponen de dos
alternativas basadas en el uso de un hipervisor, donde los de
nivel 1 actúan sobre el hardware directamente pudiendo ser
de virtualización completa, o paravirtualización . Los
hipervisores de nivel dos actúan por encima del S.O.
La problemática que supone su implementación viene derivada, por la multitud de opciones que
pueden integrar las posibles alternativas a la hora de generar las políticas asociadas.
Por ejemplo, se aplica una política predefinida para partición de los datos de entrada y la división
del trabajo en tareas, una política de planificación de las tareas en los diferentes nodos de
computación, una política de gestión de tolerancia a fallos, y un patrón de comunicación
transparente entre las diferentes tareas de la aplicación. MapReduce es un modelo de
programación que permite el procesamiento y la gestión de grandes volúmenes de datos. Los
archivos de entrada son divididos en bloques de tamaños más pequeños y son distribuidos entre
los nodos de cómputo. En la función MAP los datos de entrada son procesados y es generada
una lista de pares intermedios.
A continuación, la función Reduce se aplica sobre estas tuplas intermedias y hace la agrupación
de los valores que tienen la misma clave. Los datos de entrada son repartidos en bloques y
distribuidos para los nodos del cluster donde serán ejecutadas las funciones MAP. Estas tuplas
son almacenadas en los discos locales de cada nodo, ordenadas y distribuidas para los nodos
que ejecutarán las funciones de reducción.
1.5.- Hadoop
El proyecto Apache Hadoop consta de cuatro módulos principales:
HDFS: sistema de archivos distribuido de Hadoop. Este es el sistema de archivos que administra
el almacenamiento de grandes conjuntos de datos en un clúster de Hadoop. HDFS puede
manejar datos estructurados y no estructurados. El hardware de almacenamiento puede variar
desde cualquier HDD de nivel de consumidor hasta unidades empresariales.
Hadoop Common: El conjunto de bibliotecas y utilidades comunes del que dependen otros
módulos. Otro nombre para este módulo es el núcleo de Hadoop, ya que proporciona soporte
para todos los demás componentes de Hadoop.
DataNodes también mantienen el NameNode actualizado sobre sus estados. Durante el proceso
de inicialización, cada DataNode informa al NameNode sobre que bloques mantiene
almacenados. A continuación, los DataNode siguen informando al NameNode sobre los cambios
que se producen en los bloques que mantiene y reciben instrucciones del NameNode para crear,
mover o borrar los bloques que gestiona. NameNode mantiene todo el namespace en la
memoria.
1.6 Spark
Apache Spark es una herramienta de código abierto. Está diseñado para un rendimiento rápido
y utiliza RAM para almacenar en caché y procesar datos. Spark realiza diferentes tipos de cargas
de trabajo de big data. Con API de alto nivel fáciles de usar, Spark puede integrarse con muchas
bibliotecas diferentes, incluidas PyTorch y TensorFlow.
El motor Spark se creó para mejorar la deficiencia de MapReduce y mantener sus beneficios.
Aunque Spark no tiene su sistema de archivos, puede acceder a datos en muchas soluciones de
almacenamiento diferentes.
Hay cinco componentes principales de Apache Spark:
• Apache Spark Core. La base de todo el proyecto. Spark Core es responsable de las funciones
necesarias como la programación, el despacho de tareas, las operaciones de entrada y salida,
la recuperación de fallas, etc. Otras funcionalidades se construyen sobre él.
• Spark Streaming. Este componente permite el procesamiento de flujos de datos en vivo. Los
datos pueden provenir de muchas fuentes diferentes, incluidas Kafka, Kinesis, Flume, etc.
• Spark SQL. Spark utiliza este componente para recopilar información sobre los datos
estructurados y cómo se procesan los datos.
• Biblioteca de aprendizaje automático (MLlib). Esta biblioteca consta de muchos algoritmos
de aprendizaje automático. El objetivo de MLlib es la escalabilidad y hacer que el aprendizaje
automático sea más accesible.
• GraphX. Un conjunto de API que se utilizan para
facilitar las tareas de análisis de gráficos.
Hadoop se basa en el hardware de todos los días para el almacenamiento y es el más adecuado
para el procesamiento de datos lineal. Apache Spark funciona con conjuntos de datos
distribuidos resistentes, ver figura 1.20. Con los cálculos en memoria y las API de alto nivel, Spark
maneja de manera efectiva las transmisiones en vivo de datos no estructurados. Además, los
datos se almacenan en un número predefinido de particiones.
Sin embargo, datos de entrada compartidos no son manejados eficientemente por Hadoop
causando accesos innecesarios a disco y tráfico en la red.
Aparece el “Data Frame”, como nueva estructura de datos de Spark para este fin.
En el ejemplo siguiente, se observa como se construye a partir de un fichero json la “Data Frame”
comentada anteriormente. A partir de esta estructura de manejo distribuido como los RDD, se
pueden empezar a realizar consultas, poner filtros, escribir directamente en una tabla, etc.