Big Data - Oposiciones TIC
Document Details
Uploaded by ProlificLogic
null
Tags
Summary
This document provides an introduction to Big Data, covering its definition, characteristics (the 3 Vs and 2 new Vs), and applications. It details different types of data and the importance of various data management tools, methodologies, and infrastructures, useful in various scenarios. This document is beneficial for professionals in the field of data science, software systems, or information technology.
Full Transcript
Oposiciones TIC Big Data Tabla de contenidos Introducción Los datos se han convertido en un activo muy valioso para todas las organizaciones en la actualidad y como consecuencia directa se están llevando a cabo importantes avances para explotar la ingente cantidad y variedad de datos que se generan...
Oposiciones TIC Big Data Tabla de contenidos Introducción Los datos se han convertido en un activo muy valioso para todas las organizaciones en la actualidad y como consecuencia directa se están llevando a cabo importantes avances para explotar la ingente cantidad y variedad de datos que se generan y almacenan de forma constante a una velocidad cada vez más alta. Siguiendo esta misma línea, los datos se han convertido en una destacada fuente de nuevos empleos: Big Data o Data Science son sin duda dos de los temas más relevantes en los últimos tiempos. No solo los sectores más digitales, sino también otros sectores más tradicionales como la Salud, el transporte, la Energía, etc. pueden incorporar valor mediante la explotación de datos que provienen de sensores, satélites, señales GPS y los generados por personas a través de Redes Sociales. Uno de los grandes bloques de la Agenda Digital para España, impulsada a raíz de la aprobación de la Agenda Digital Europea, es el de la Economía Digital que incluye un apartado específico al Big Data como línea de actuación para potenciar las industrias de futuro. En la misma línea el Plan de Transformación Digital, sin hacer mención expresa al concepto de Big Data, propone entre sus medidas algunas que tienen que ver con estas tecnologías y que se concretan con acciones tales como establecer una plataforma para el análisis de datos compartidos interdepartamental, desarrollar herramientas para usar la información basada en la localización o propiciar el análisis sistematizado, predictivo y evaluativo sobre múltiples datos. Definición de Big Data Big Data se puede definir como la gestión y análisis de grandes volúmenes de datos que no pueden tratarse de manera convencional, dado que superan los límites y capacidades de las herramientas de software normalmente utilizadas para la captura, gestión y procesamiento de datos. El concepto engloba infraestructuras, tecnologías y servicios creados para dar respuesta al procesamiento de grandes conjuntos de datos estructurados, no estructurados o semiestructurados (mensajes en redes sociales, señales de GPS, archivos de audio, video, sensores, imágenes digitales, emails, datos de encuestas, logs, etc.) que pueden provenir de dispositivos de distinta naturaleza como sensores, micrófonos, cámaras, escáneres médicos, imágenes. El objetivo de Big Data, al igual que los sistemas analíticos convencionales, es transformar el Dato en información para ayudar a la toma de decisiones, incluso en tiempo real. La definición de Big Data está muy relacionada con el concepto de internet de las cosas, concepto propuesto por Kevin Ashton en el Auto-ID Center del MIT en 1999, que consiste en la interconexión digital de objetos cotidianos con internet. Otra definición relacionada con Big Data es la de Data Lake o «lagos de datos» que son repositorios en los que los datos se almacenan con distintos esquemas, en crudo y en su totalidad. Estos datos provienen de diferentes fuentes que suelen tener su propio formato nativo. Las necesidades de los diferentes grupos de usuarios son las que permitirán identificar las versiones filtradas o procesadas de dichos datos necesarias para resolverlas (bien sea en forma de consultas preprocesadas, o como entrada para un data warehouse con una estructura de datos determinada para agregarlo a otras fuentes). Activos de información caracterizados por su volumen elevado, velocidad elevada y alta variedad, que demandan soluciones innovadoras y eficientes de procesado para la mejora del conocimiento y la toma de decisiones en las organizaciones. Gartner Las 3 + 2 v’s del Big Data Una forma útil de caracterizar el Big Data es con sus tres dimensiones, ’las tres V:’ volumen, variedad y velocidad. Si bien estas dimensiones engloban los principales atributos, se debería tener en cuenta una cuarta y quinta dimensión que han sido añadidas tras consenso por la comunidad tecnológica que rodea al el Big Data y el Business Intelligence: la veracidad y el valor. Incluir la veracidad como el cuarto atributo de big data pone de relieve la importancia de abordar y gestionar la incertidumbre inherente a algunos tipos de datos. En cuanto al valor se justifica por la necesidad de obtener un retorno a la inversión necesaria para poner en funcionamiento las infraestructuras para almacenar estos volúmenes de datos. La convergencia de estas cuatro dimensiones ayuda tanto a definir como a distinguir big data: Volumen: la cantidad de datos. El volumen hace referencia a las cantidades masivas de datos que las organizaciones intentan explotar para mejorar la toma de decisiones. Variedad: diferentes tipos y fuentes de datos. La variedad tiene que ver con gestionar la complejidad de múltiples tipos de datos, datos estructurados, semiestructurados y no estructurados, que se encuentran tanto dentro como fuera de la organización y que están almacenados en diferentes formatos como texto, datos web, tuits, datos de sensores, audio, vídeo, secuencias de clic, archivos de registro… Velocidad: los datos en movimiento. Hoy en día, los datos se generan de forma continua a una velocidad a la que a los sistemas tradicionales les resulta imposible captarlos, almacenarlos y analizarlos. Para los procesos en los que el tiempo resulta fundamental, tales como la detección de fraude en tiempo real o el marketing “instantáneo” multicanal, ciertos tipos de datos deben analizarse en tiempo real para que resulten útiles para el negocio. Veracidad: la incertidumbre de los datos. La veracidad hace referencia al nivel de fiabilidad asociado a ciertos tipos de datos. Esforzarse por conseguir unos datos de alta calidad es un requisito importante y un reto fundamental de Big Data. Valor: El procesamiento de los datos debe crear el valor para la organización que garantice el retorno de la inversión de aplicar técnicas Big Data a los datos. Las 5 v’s del BigData En la actualidad se han propuesto nuevas Vs al conjunto: Viabilidad: Capacidad de una organización para utilizar de forma eficaz el gran volumen de datos que maneja. Visualización de los datos: La forma en que los datos son presentados una vez que se procesan. Tipos de datos En Big Data se suelen clasificar los datos en las tres categorías siguientes: Datos estructurados: se refieren a los que están almacenados en bases de datos, de manera ordenada. Son generados por las personas (N.º teléfono, dirección) o las máquinas (transacciones bancarias) y se caracterizan por estar altamente organizados (tablas con filas y columnas). Datos semi-estructurados: representan la información que, aunque no reside en bases de datos, tiene algunas propiedades en su organización que la hace fácil de analizar. Ejemplo de este tipo de datos son los archivos XML y JSON. Datos no estructurados: pueden ser tanto texto como contenido multimedia (videos, fotos, ficheros de audio). Pueden estar generados por personas (por ejemplo, en redes sociales) o máquinas (sensores para IoT). Ejemplos: archivos HTML o los archivos LOG que genera un servidor. Tamaño, variedad y complejidad de los datos Fuentes de información Podemos clasificar la procedencia de los datos que se trataran con tecnologías Big Data en las siguientes categorías: Web and Social Media: Incluye contenido web e información que es obtenida de las redes sociales como Facebook, Twitter, LinkedIn, blogs, etc. Machine-to-Machine (M2M): M2M se refiere a las tecnologías que permiten conectarse a otros dispositivos. M2M utiliza dispositivos como sensores o medidores que capturan algún evento en particular (velocidad, temperatura, presión, variables meteorológicas, variables químicas como la salinidad, etc.) los cuales transmiten a través de redes alámbricas, inalámbricas o híbridas a otras aplicaciones que traducen estos eventos en información significativa. Big Transaction Data: Incluye registros de facturación, en telecomunicaciones registros detallados de las llamadas (CDR), etc. Estos datos transaccionales están disponibles en formatos tanto semiestructurados como no estructurados. Biometrics: Información biométrica en la que se incluye huellas digitales, escaneo de la retina, reconocimiento facial, genética, etc. En el área de seguridad e inteligencia, los datos biométricos han sido información importante para las agencias de investigación. Human Generated: Las personas generamos diversas cantidades de datos como la información que guarda un call center al establecer una llamada telefónica, notas de voz, correos electrónicos, documentos electrónicos, estudios médicos, etc. Fuentes de información del BigData Tipos de procesamientos de datos Existen dos tipos de procesamiento de datos en función de la forma en que éstos son tratados. Procesamiento en modo batch o lotes: permite procesar volúmenes de datos de forma espaciada en el tiempo (por ejemplo, cada 15 minutos o a diario). Si el volumen de datos es muy grande, el proceso puede llevar un cierto tiempo que puede ser aceptable por aquellos que necesitan dicha información para la toma de decisiones. Procesamiento en modo stream o tiempo (semi)-real: el modo stream permite procesar los datos casi en el momento en que éstos se producen (por ejemplo cada segundo). Este procesamiento puede ser necesario si la espera para tomar decisiones implica un coste y se necesita aplicar el proceso de manera casi inmediata. Business Analytics y Data Science A continuación, se explican algunos conceptos sobre Big Data, como son el de Análisis del negocio (Business Analytics) y Ciencia de los datos (Data Science) que complementan a los de Inteligencia de negocio (Business Intelligence) y Minería de datos (Data Mining) vistos en apartados anteriores. Se define Business Analytics (BA) como “la exploración metódica de datos en una organización, con énfasis en el análisis estadístico para la toma de decisiones basada en los datos”. La diferencia fundamental con el Business Intelligence (BI) es que este último se centra en la utilización de un conjunto de métricas tanto para medir el rendimiento pasado como para establecer un plan de negocio y está más ligada a la generación de información para este proceso, mientras que el BA se enfoca al desarrollo de nuevos conocimientos y la comprensión del rendimiento del negocio basados en datos y métodos estadísticos. Por otro lado, el Data Science se puede considerar como una combinación de las matemáticas, estadística, programación, el contexto del problema que se resuelve, formas distintas de capturar datos que no se almacenaban hasta ahora y la capacidad de ver las cosas de forma diferente junto a la actividad significativa y necesaria de limpieza, preparación y alineación de los datos. Los Roles en los proyectos Big Data El paradigma del proceso de datos mediante técnicas de Big Data requerirá la incorporación de perfiles TIC especializados en estas nuevas tecnologías. Aunque no existe un consenso concreto en cuanto a su denominación, sí que están claros los roles que deben cumplir: 1. Higienista de Datos (Data Hygienists): asegurará que los datos de entrada en el sistema son limpios y precisos, y que permanecen así durante todo su ciclo de vida. 2. Exploradores de Datos (Data Explorers): Descubren, dentro de las cantidades ingentes de datos, los datos necesarios del negocio. Esta es una tarea importante porque una gran cantidad de datos no han sido pensados para uso analítico y, por tanto, no se almacenan ni se organizan de manera que sea fácil su acceso. 3. Arquitectos de Datos (Data Architects): juntan los datos descubiertos, los organizan de forma que estén listos para analizar y se aseguran de que se pueden consultar de forma útil, con tiempos de respuesta adecuados por todos los usuarios. 4. Científicos de Datos (Data Scientists): toman los datos organizados y crean sofisticados modelos de análisis que ayudan a predecir comportamientos, segmentaciones, optimizaciones, etc. Se aseguran de que cada modelo se actualiza con frecuencia. 5. Expertos de Campaña (Campaign Experts): transforman los modelos en resultados. Utilizan lo que aprenden de los modelos para dar prioridad a los canales y secuenciar campañas. El personal técnico TIC debería cubrir esencialmente los que requieran habilidades específicamente tecnológicas como pueden ser los de Data Architects, Data Scientist y Data Hygienists, dado que los restantes están más relacionados con las áreas del negocio y deberán ser cubiertos por expertos en éste. Componentes en un entorno Big Data El modelo de programación MapReduce MapReduce es un modelo de programación diseñado para dar soporte a la computación paralela sobre grandes conjuntos de datos repartidos entre varios ordenadores. El nombre está inspirado en los nombres de dos importantes funciones de la programación funcional: Map y Reduce. MapReduce ha sido adoptado mundialmente como una implementación open source denominada Hadoop. MapReduce se emplea en la resolución práctica de algunos algoritmos susceptibles de ser paralelizados. Sin embargo, MapReduce no es la solución a cualquier tipo de problema, igual que cualquier problema no puede ser resuelto eficientemente por MapReduce. Características Se han escrito implementaciones de bibliotecas de MapReduce en diversos lenguajes de programación como C++, Java y Python. Funciones Map y Reduce Las funciones Map y Reduce están definidas ambas con respecto a datos estructurados en tuplas del tipo (clave, valor). Map() Map toma uno de estos pares de datos con un tipo en un dominio de datos, y devuelve una lista de pares en un dominio diferente: Map(k1,v1) -> list(k2,v2) Map se encarga del mapeo y es aplicada en paralelo para cada elemento de la entrada. Esto produce una lista de pares (k2,v2) por cada llamada. Después de ese primer paso junta todos los pares con la misma clave de todas las listas y los agrupa, creando un grupo para cada una de las diferentes claves generadas. Reduce() La función Reduce es aplicada en paralelo para cada grupo, produciendo una colección de valores para cada dominio: Reduce(k2, list (v2)) -> list(v3) Cada llamada a Reduce produce un valor v3 o una llamada vacía, aunque una llamada puede retornar más de un valor. El retorno de todas esas llamadas se recoge como la lista de resultado deseado. Por lo tanto, MapReduce transforma una lista de pares (clave, valor) en una lista de valores. Arquitectura La función map() se ejecuta de forma distribuida a lo largo de varias máquinas. Los datos de entrada, procedentes por regla general de un gran archivo, se dividen en un conjunto de M particiones. Estas particiones pueden ser procesadas en diversas máquinas. En una llamada a MapReduce ocurren varias operaciones: Se procede a dividir las entradas en M particiones de tamaño aproximado de 64MB. El programa MapReduce se comienza a instanciar en las diversas máquinas del clúster. Por regla general, el número de instancias se configura en las aplicaciones. Existen M tareas map() y R tareas reduce(). Una de las copias del programa toma el papel de «maestro». Al resto se les llama «workers», a los que el master les asigna tareas. Un worker tiene tres estados: reposo, trabajando y completo. El «maestro» se encarga de buscar «workers» en reposo (sin tarea asignada) y les asignará una tarea de map() o de reduce(). MAP Un worker con una tarea map() asignada tiene como entrada su partición correspondiente. Se dedicará a parsear los pares (clave, valor) para crear una nueva pareja de salida. Los pares clave y valor producidos por la función map() se almacenan como buffer en la memoria. REDUCE Cada cierto tiempo los pares clave-valor almacenados en el buffer se escriben en el disco local, repartidos en R regiones. Las regiones de estos pares clave-valor son pasados al master, que es responsable de redirigir a los «workers» que tienen tareas de reduce(). Cuando un worker de tipo reduce() es notificado por el «maestro» con la localización de una partición, éste emplea llamadas remotas para hacer lecturas de la información almacenada en los discos duros por los workers de tipo map(). Cuando un worker de tipo reduce() lee todos los datos intermedios, ordena las claves de tal modo que se agrupan los datos encontrados que poseen la misma clave. El ordenamiento es necesario debido a que, por regla general, muchas claves de funciones map() diversas pueden ir a una misma función reduce(). En aquellos casos en los que la cantidad de datos intermedios sean muy grandes, se suele emplear un ordenamiento externo. El worker de tipo reduce() itera sobre el conjunto de valores ordenados intermedios, y lo hace por cada una de las claves únicas encontradas. Toma la clave y el conjunto de valores asociados a ella y se los pasa a la función reduce(). La salida de reduce() se añade al archivo de salida de MapReduce. FINALIZACIÓN Cuando todas las tareas map() y reduce() se han completado, el «maestro» levanta al programa del usuario. Llegados a este punto la llamada MapReduce retorna el control al código de un usuario, en ese momento se consideran finalizadas las tareas. Las salidas se distribuyen en un fichero completo, o en su defecto se reparten en R ficheros. Estos R ficheros pueden ser la entrada de otro MapReduce o puede ser procesado por cualquier otro programa que necesite estos datos. Fases MapReduce La información escrita en local por los nodos workers de tipo map es agregada y ordenada por una función agregadora encargada de realizar esta operación. Los valores ordenados son de la forma [k, [v1, v2, v3, …, vn]]. De esta forma la función reduce() recibe una lista de valores asociados a una única clave procedente del combinador. Debido a que la latencia de red de ordenadores y de sus discos suele ser mayor que cualquier otra de las operaciones, cualquier reducción en la cantidad de datos intermedios incrementará la eficiencia de los algoritmos, causando una mejora real de la eficiencia global. Es por esta razón que muchas distribuciones de MapReduce suelen incluir operaciones de agregación en local, mediante el uso de funciones capaces de agregar datos localmente, evitando, o reduciendo en la medida de lo posible el movimiento de grandes ficheros. La siguiente figura refleja el comportamiento de MapReduce desde que el programa cliente crea la petición de trabajo hasta que se generan los archivos de salida: Comportamiento de MapReduce Tolerancia a fallos Aun teniendo una baja probabilidad de fallo, es muy posible que uno (o varios) de los workers quede desactivado, por ejemplo por fallo de la máquina que le daba soporte. El «master» periódicamente hace ping a cada worker para comprobar su estado. Si no existe respuesta tras un cierto tiempo de espera, el master interpreta que el worker está desactivado. Cualquier tarea map() completada por el worker vuelve de inmediato a su estado de espera, y por lo tanto puede resultar elegible para su asignación en otros workers. De forma similar, cualquier función map o reduce que se encuentre en progreso durante el fallo, se resetea a estado de reposo pudiendo ser elegida para su nueva reasignación. Las tareas map() completadas se vuelven a re-ejecutar si hay un fallo debido en parte a que su salida se almacena en los discos locales de la máquina que falló, y por lo tanto se consideran inaccesibles. Las tareas reduce() completas no es necesario que vuelvan a ser ejecutadas debido a que su salida se ha almacenado en el sistema global. Cuando la tarea de map() es ejecutada por un worker A y luego por un worker B (debido principalmente a un fallo), en este caso todas las tareas reduce() son notificadas para que eliminen datos procedentes del worker A y acepten las del worker B. Ejemplo MapReduce Conteo de palabras Función Map(): Va contando cada palabra que hay en document y poniendo un valor 1 asociado a la palabra, el cual simboliza una aparición de esa palabra en el documento. map(String name, String document): // clave: nombre del documento // valor: contenido del documento for each word w in document: EmitIntermediate(w, 1); Función Reduce(): Para buscar las apariciones de la palabra en cuentasParciales y sumar todos los valores asociados en la variable result. reduce(String word, Iterator cuentasParciales): // word: una palabra // cuentasParciales: una lista parcial para cuentas agregadas int result = 0; for each v in cuentasParciales: result += ParseInt(v); Emit(result); Ejemplo: MAP Nos llega a las funciones map dos particiones de un archivo: (f1, “El perro estaba en el parque ladrando”) (f2, “El niño de Juan estaba llorando esta noche en la cuna”) Lo que produciría la siguiente salida de las funciones map: (‘el’, 1), (‘perro’, 1), (‘estaba’, 1), (‘en’, 1), (‘el’, 1), (‘parque’, 1), (‘ladrando’, 1), (‘el’, 1), (‘niño’, 1), (‘de’, 1), (‘Juan’, 1), (‘estaba’, 1), (‘llorando’, 1), (‘esta’, 1), (‘noche’, 1), (‘en’, 1), (‘la’, 1), (‘cuna’, 1). FUNCIÓN INTERMEDIA Produce lo siguiente juntando los pares de misma clave (palabra): (‘el’, [1, 1, 1]), (‘perro’, [1]), (‘estaba’, [1, 1]), (‘en’, [1, 1]), (‘parque’, [1]), (‘ladrando’, [1]), (‘niño’, [1]), (‘de’, [1]), (‘Juan’, [1]), (‘llorando’, [1]), (‘esta’, [1]), (‘noche’, [1]), (‘la’, [1]), (‘cuna’, [1]). REDUCE Realizará el conteo para cada par asociado a una palabra: (‘el’, 3), (‘perro’, 1), (‘estaba’, 2), (‘en’, 2), (‘parque’, 1), (‘ladrando’, 1), (‘niño’, 1), (‘de’, 1), (‘Juan’, 1), (‘llorando’, 1), (‘esta’, 1), (‘noche’, 1), (‘la’, 1), (‘cuna’, 1). Entorno Hadoop Hadoop está inspirado en el proyecto de Google File System (GFS) y en el paradigma de programación MapReduce. Hadoop está compuesto de tres piezas: Hadoop Distributed File System (HDFS), Hadoop MapReduce y Hadoop Common. Arquitectura Hadoop consiste básicamente en el Hadoop Common, que proporciona acceso a los sistemas de archivos soportados por Hadoop. El paquete de software de Hadoop Common contiene los archivos .jar y los scripts necesarios para hacer correr Hadoop. Una funcionalidad clave es que, para la programación efectiva de trabajo, cada sistema de archivos debe conocer y proporcionar su ubicación: el nombre del rack (más precisamente, del switch) donde está el nodo Master. Las aplicaciones Hadoop pueden usar esta información para ejecutar trabajo en el nodo donde están los datos y, en su defecto, en el mismo rack/switch, reduciendo así el tráfico de red. El sistema de archivos HDFS se comporta así cuando replica datos para intentar conservar copias diferentes de los datos en racks diferentes. El objetivo es reducir el impacto de un corte de energía de un rack o de cualquier otro fallo, de modo que, incluso si se producen estos eventos, los datos todavía puedan ser legibles. Un clúster típico Hadoop incluye un nodo maestro y múltiples nodos esclavo. El nodo maestro Hadoop requiere tener instalados en los nodos del clúster JRE 1.6 o superior y SSH. Rack: En Hadoop se denomina rack a la combinación de “nodos de datos”. Un rack puede tener un máximo de 40 nodos máster. Cada rack tiene un switch que le permite comunicarse con los distintos racks del sistema, sus nodos y con los procesos clientes. Nodo master: Consiste en jobtracker (rastreador de trabajo), tasktracker (rastreador de tareas), namenode (nodo de nombres), y datanode (nodo de datos). Es el encargado de almacenar los metadatos asociados a sus nodos slave dentro del rack del que forma parte. El nodo máster es el responsable de mantener el estatus de sus nodos slave, estableciendo uno de ellos como nodo pasivo, que se convertirá en nodo máster, si por cualquier motivo éste se quedara bloqueado. Nodo slave (compute node): Consiste en un nodo de datos y rastreador de tareas. Es el nodo encargado de almacenar la información que se está procesando por el nodo máster en un momento concreto. Arquitectura Hadoop Sistema de archivos HDFS: es el sistema de ficheros propio de Hadoop. Está diseñado para escalar a decenas de petabytes de almacenamiento. HDFS puede montarse bajo diversas alternativas, entre ellas: Amazon S3: Éste se dirige a clústeres almacenados en la infraestructura del servidor bajo la demanda de Amazon Elastic Compute Cloud. CloudStore (antes Kosmos Distributed File System), el cual es consciente de los racks. FTP: éste almacena todos sus datos en un servidor FTP accesible remotamente. HTTP y HTTPS de solo lectura. El sistema de archivos Hadoop (HDFS) es un sistema de archivos distribuido diseñado para ejecutarse en hardware. Tiene muchas similitudes con otros sistemas distribuidos existentes, sin embargo, las diferencias con respecto a ellos son significativas. HDFS es altamente tolerante a fallos y está diseñado para ser implementado en hardware de bajo coste. HDFS proporciona acceso de alto rendimiento para datos de aplicación y es adecuado para las aplicaciones que tienen grandes conjuntos de datos. HDFS relaja unos requisitos de POSIX para permitir el acceso de streaming para presentar los datos del sistema. HDFS fue construido originalmente como la infraestructura para el proyecto de motor de búsqueda Apache Nutch web y en la actualidad es un subproyecto de Apache Hadoop. HDFS tiene una arquitectura maestro-esclavo. Un clúster HDFS consta de un solo NameNode, un servidor maestro que administra el espacio de nombres del sistema de archivo y regula el acceso a los archivos por parte de los clientes. Además, hay un número de DataNodes, generalmente uno por cada nodo del clúster, que administra el almacenamiento de información conectado a los nodos sobre los que corren. HDFS expone un espacio de nombres del sistema de archivo y permite que los datos de usuario se almacenen en archivos. Internamente, un archivo se divide en uno o más bloques (generalmente de un tamaño de 64MB o 128MB) y estos bloques se almacenan en un conjunto de DataNodes. El NameNode ejecuta operaciones de espacio de nombres del sistema archivos como abrir, cerrar, renombrar archivos y directorios. También determina la asignación de bloques para DataNodes. Los DataNodes son responsables de servir las peticiones para leer y escribir desde el archivo de clientes del sistema. Arquitectura HDFS NameNode y DataNode son piezas de software diseñadas para ejecutarse en máquinas de productos básicos. Estas máquinas suelen correr en un sistema operativo GNU / Linux (OS). HDFS está construido utilizando el lenguaje Java, y cualquier equipo que admita Java puede ejecutar el NameNode o el software DataNode. El uso del lenguaje Java, altamente portátil, significa que HDFS se puede implementar en una amplia gama de máquinas. Una implementación típica tiene una máquina dedicada que ejecuta sólo el software NameNode. Cada uno de los otros equipos del clúster ejecuta una instancia del software DataNode. La arquitectura no excluye la ejecución de múltiples DataNodes en la misma máquina, pero en una implementación real rara vez es el caso. La existencia de un único NameNode en un clúster simplifica en gran medida la arquitectura del sistema. El NameNode es el árbitro y el repositorio de todos los metadatos HDFS. El sistema está diseñado de tal manera que datos del usuario nunca fluyen a través del NameNode. HDFS está diseñado para almacenar con fiabilidad archivos muy grandes. Almacena cada archivo como una secuencia de bloques; todos los bloques de un archivo, excepto el último bloque son del mismo tamaño. Los bloques de un archivo se replican para tolerancia a fallos. El tamaño del bloque y el factor de replicación son configurables por archivo. Una aplicación puede especificar el número de réplicas de un archivo. El factor de replicación se puede especificar en el momento de creación de archivos y se puede cambiar más adelante. Los archivos en HDFS son de una sola escritura y tienen estrictamente un escritor en cualquier momento. El NameNode toma todas las decisiones con respecto a la replicación de bloques. Recibe periódicamente un Heartbeat (pulso) y un Blockreport (informe de bloque) de cada uno de los DataNodes del clúster. La recepción de un latido del corazón implica que el DataNode funciona correctamente. Un Blockreport contiene una lista de todos los bloques en un DataNode. El espacio de nombres HDFS es almacenado por el NameNode. El NameNode utiliza un registro de transacciones llamado EditLog para grabar persistentemente cada cambio que se produce para presentar los metadatos del sistema. Por ejemplo, la creación de un nuevo archivo en HDFS hace que el NameNode inserte un registro en la EditLog indicando esto. Del mismo modo, cambiar el factor de replicación de un archivo hace que un nuevo registro se inserte en el EditLog que se almacena en el sistema de archivos. Los DataNode almacenan los archivos HDFS en su sistema de archivos local. El DataNode almacena cada bloque de datos HDFS en un archivo aparte en su sistema de archivos local. El DataNode no crea todos los archivos en el mismo directorio. En su lugar, se utiliza una heurística para determinar el número óptimo de archivos por directorio y crea subdirectorios apropiadamente. No es óptimo crear todos los archivos locales en el mismo directorio ya que el sistema de archivos local podría no ser capaz de soportar de manera eficiente un gran número de archivos en un solo directorio. Cuando un DataNode inicia, explora su sistema de archivos local, genera una lista de todos los bloques de datos HDFS que corresponden a cada uno de estos archivos locales y le envía un informe al NameNode: este es el Blockreport. Todos los protocolos de comunicación HDFS se colocan en capas en la parte superior del protocolo TCP/IP. Un cliente establece una conexión a un puerto TCP configurable en la máquina NameNode. Los DataNode hablan con el NameNode mediante el protocolo DataNode. HDFS se puede acceder desde las aplicaciones de muchas maneras diferentes. De forma nativa, HDFS proporciona una API Java para aplicaciones. También se puede utilizar un navegador HTTP para navegar por los archivos de una instancia HDFS. Se puede exponer HDFS a través del protocolo WebDAV. HDFS proporciona un interfaz de línea de comandos shell llamado FS que permite al usuario interactuar con los datos en HDFS. Ecosistema Hadoop A continuación se describen todos los proyectos, frameworks y herramientas que rodean al entorno Hadoop. Ecosistema de proyectos Hadoop Hadoop: Framework para aplicaciones distribuidas Ya hemos hablado de este framework en el apartado anterior en el que hemos descrito su arquitectura. Resumiendo, Hadoop aparece como una solución al problema planteado por el Big Data. Se trata de un framework open source para ejecutar aplicaciones distribuidas y permite trabajar con miles de nodos y petabytes de datos. Está inspirado en los documentos Google para MapReduce y Google File System (GFS). Mahout: Máquina de aprendizaje escalable y minería de Datos Apache Mahout es un proyecto de Apache para producir implementaciones gratuitas de algoritmos de aprendizaje basados en máquinas distribuidas. Está centrado básicamente en áreas de filtrado colaborativo, clustering, clasificación, etc. Mahout también proporciona librerías Java para matemáticas comunes (algebra lineal y estadística), métodos y tipos de datos primitivos de Java. Mahout es un trabajo en proceso; el número de algoritmos implementados ha crecido sustancialmente. PIG Es un Lenguaje procedimental de alto nivel que permite la consulta de grandes conjuntos de datos semiestructurados utilizando Hadoop y la plataforma MapReduce. Apache Pig es una plataforma para el análisis de grandes conjuntos de datos que consta de un lenguaje de alto nivel para expresar programas de análisis, junto con la infraestructura para la evaluación de los mismos. El lenguaje de programación que utiliza Pig, Pig Latin, crea estructuras tipo SQL (SQL-like), de manera que, en lugar de escribir aplicaciones separadas de MapReduce, se puede crear un script de Pig Latin, el cual es automáticamente paralelizado y distribuido a través de un clúster. Originalmente desarrollado por Yahoo, Pig fue adoptado por la Apache Software Foundation a partir del año 2007; un año después obtuvieron la versión inicial como parte de un subproyecto de Apache Hadoop. Para lograr un mejor entendimiento sobre el objetivo de la creación de Pig, el equipo de desarrollo decidió definir una serie de enunciados que resumen el proyecto, mediante una similitud con el nombre: Pigs eat anything: Al igual que cualquier cerdo que come cualquier cosa, Pig puede operar con cualquier tipo de datos, sea éste estructurado, semi-estructurado o no estructurado. Pigs live anywhere: A pesar de que Pig fue inicialmente implementado en Hadoop, no está orientado solamente a esta plataforma. Su propósito es ser un lenguaje de procesamiento paralelo. Pigs are domestic animals: Pig está diseñado para ser controlado y modificado fácilmente por sus usuarios. Pig puede enriquecerse a través de funciones definidas por el usuario (UDF). Con el uso de UDFs se puede extender Pig para un procesamiento personalizado. Pigs Fly: Pig procesa datos rápidamente. La intención es mejorar el rendimiento y no las características, lo que evita que demasiada funcionalidad le impida “volar”. Naturalmente Yahoo!, al ser creador de Pig, fue el primer usuario de la plataforma, tanto para los procesos de búsqueda web como al incorporarlo en Hadoop. De hecho, más de la mitad de procesos que son ejecutados en Hadoop están basados en scripts de Pig Latin. Pero no sólo Yahoo ha utilizado Pig; a partir del año 2009 otras compañías comenzaron a adoptar Pig dentro de su procesamiento de datos como LinkedIn para mostrar “gente que podrías conocer”, Twitter para procesar logs de datos o AOL para búsqueda de información. Características PigLatin PigLatin es un lenguaje de flujos de datos en paralelo. Esto es, que permite a los programadores describir cómo los datos provenientes de una o más entradas deben ser leídos, procesados y luego almacenados a uno o más flujos de salida en paralelo. La sintaxis de Pig Latin es muy similar a la de SQL, aunque Pig Latin es un lenguaje de transformación de datos y, por lo tanto, es similar a los optimizadores de consultas de base de datos de los sistemas de bases de datos actuales. En Pig Latin no existen condicionales tipo if o bucles, dado que Pig Latin se enfoca en el flujo de los datos más que en describir el control del flujo de los datos. Pig Latin utiliza operadores relacionales para efectuar diversas operaciones sobre los datos que se están analizando, desde la carga de los datos hasta su almacenamiento en un archivo. Aunque no existen bucles “for” en Pig Latin, existe el operador FOREACH cuya naturaleza es iterar sobre las tuplas y transformar los datos para generar un nuevo conjunto de datos durante la iteración. Considerando la similitud de este operador con la terminología de base de datos, se podría decir que FOREACH es el operador de proyección de Pig. Además de los operadores relacionales, existen a su vez operadores de diagnóstico que son de mucha utilidad para depurar los scripts de Pig Latin. El operador DUMP permite desplegar en pantalla el contenido de una relación, DESCRIBE imprime en pantalla el esquema detallado de una relación (campo y tipo) y, EXPLAIN permite visualizar cómo están los operadores. Una de las grandes ventajas que ofrece Pig es el uso de los operadores relacionales como JOIN, FILTER, GROUP BY, etc., los cuales en MapReduce resultan de costosa implementación. Aunque en MapReduce el coste de escribir y mantener código es mucho mayor que en Pig o inclusive que en Jaql (Query Language for JSON), no siempre buscar una opción alternativa a MapReduce puede ser lo más viable, puesto que es posible desarrollar algoritmos en MapReduce que no puedan ser tan fácilmente implementados en Pig o Jaql. De esta manera para algoritmos no tan triviales y que sean sensibles a un muy alto rendimiento, MapReduce sigue siendo la mejor opción. Otro de los casos de uso de Pig es el de herramienta ETL mediante scripts simples y fáciles de entender. Sin embargo, esto no indica que sea un reemplazo de una herramienta de ETL, puesto que no provee funcionalidades específicas de un ETL. HIVE Hive es un sistema de almacenamiento de datos de Hadoop que facilita el resumen de datos fácilmente, consultas ad-hoc, y el análisis de grandes conjuntos de datos almacenados en los sistemas de archivos compatibles con Hadoop. El software Apache Hive nos ofrece lo siguiente: Herramientas que permiten extraer, transformar o cargar los datos (ETL, Extract, Trasform, Load) de manera sencilla. Un mecanismo para estructurar los datos en una gran variedad de formatos. Acceso a los archivos almacenados, ya sea directamente en HDFS o en otros sistemas de almacenamiento de datos, como podría ser Apache HBase. Ejecutar consultas a través del paradigma MapReduce. Hive define un lenguaje simple de consulta similar a SQL, llamado QL, que permite a los usuarios familiarizados con SQL, consultar los datos de una manera similar. Al mismo tiempo, este lenguaje también permite a los programadores que están familiarizados con el marco MapReduce poder utilizar sus funciones MAP y sus funciones REDUCE personalizadas para realizar análisis más sofisticados que pueden no estar incorporados en el lenguaje. QL también se puede ampliar con funciones personalizadas, agregaciones, y funciones de tabla. No está diseñado para cargas de trabajo OLTP y no ofrece consultas en tiempo real o actualizaciones a nivel de fila. Lo mejor es usarlo para trabajos por lotes en grandes conjuntos de datos anexados. Apache Hive proporciona una capa de SQL en la parte superior de Hadoop. Toma consultas SQL y las traduce a trabajos MapReduce, casi de la misma forma que traduce Pig. Se podría ver a Pig y Hive como competidores, dado que ambos proporcionan una forma para que los usuarios operen sobre los datos almacenados en Hadoop sin necesidad de escribir código. Sin embargo, SQL y Pig Latin tienen diferentes puntos fuertes y débiles. Por un lado Hive, al ofrecer SQL, es una mejor herramienta para hacer análisis de datos tradicionales mientras que Pig Latin es una mejor opción en la construcción de un pipeline de datos o para investigar sobre los datos en bruto. Zookeeper Apache ZooKeeper es un Servicio de coordinación de alto rendimiento para aplicaciones distribuidas. Ofrece una serie de servicios como gestión de configuraciones, naming, sincronización, grupos de servicios etc. en una interfaz simple. Es la manera que tiene Hadoop para la coordinación de todos los elementos en aplicaciones distribuidas. Algunas de las capacidades de Zookeeper son las siguientes: Sincronización de proceso: Zookeeper coordina el arranque y parada de múltiples nodos del clúster. Esto asegura que todo el procesamiento se produce en el orden previsto. Cuando un grupo de proceso entero se completa, entonces y sólo entonces se puede producir procesamiento posterior. Gestión de la configuración: Zookeeper se puede utilizar para enviar atributos de configuración a cualquiera o todos los nodos del clúster. Cuando el procesamiento depende de ciertos recursos concretos que tienen que estar disponibles en todos los nodos, Zookeeper asegura la consistencia de las configuraciones. Auto-elección: Zookeeper entiende la composición del grupo y puede asignar un rol de «líder» a uno de los nodos. Este líder / master maneja todas las solicitudes de los clientes en nombre del clúster. Si el nodo líder falla, otro líder será elegido a partir de los nodos restantes. Mensajería fiable: A pesar de que las cargas de trabajo en Zookeeper están estrechamente acopladas, es necesaria todavía una comunicación específica entre los nodos del clúster para la aplicación distribuida. Zookeeper ofrece capacidad de publicación / suscripción que permite la creación de una cola que garantiza la entrega de mensajes incluso en el caso de un fallo de nodo. Debido a que Zookeeper gestiona grupos de nodos que dan servicio a una única aplicación distribuida lo mejor es implementarlo a través de bastidores. Esto es muy diferente a los requisitos para el propio clúster (dentro de bastidores). La razón subyacente es simple: Zookeeper necesita ofrecer rendimiento, ser resistente y altamente tolerante a un nivel por encima del propio clúster. Storm Las tecnologías de procesamiento de datos basadas en MapReduce y Hadoop no son sistemas en tiempo real, ni están destinados a serlo. No es posible convertir Hadoop en un sistema en tiempo real ya que el procesamiento de datos en tiempo real tiene diferentes requisitos de los requeridos por el procesamiento por lotes. Storm se crea con el objetivo de intentar cubrir esa carencia. Apache Storm es un sistema distribuido de computación en tiempo real de código libre y abierto. Similar a Hadoop que proporciona un conjunto de primitivas generales para realizar procesamiento por lotes (batch processing), Storm pauta un conjunto de condiciones globales para poder realizar el cálculo en tiempo real. Se trata de un framework sencillo, multiplataforma y que se puede manejar con distintos lenguajes de programación. Storm fue creado por Nathan Marz y el equipo de BackType, el proyecto fue abierto cuando Twitter lo adquirió. En 2013 la fundación Apache Software aceptó a Storm en su programa de incubación. Características de Storm Las propiedades fundamentales de Storm son: Amplia utilidad: Storm puede ser utilizado para el procesamiento de mensajes, actualización de bases de datos (procesamiento de flujo), realización de consultas de datos continuas y envío de los resultados al cliente (computación continua), para la paralelización de una consulta intensa como una consulta de búsqueda sobre la marcha (RPC distribuida) y muchas otras aplicaciones. Alta escalabilidad: Para ampliar una topología, basta con agregar máquinas y aumentar la configuración de paralelismo de la topología. Robusto: Garantiza que no se pierden datos. Fácil manejo: A diferencia de sistemas como Hadoop, que son conocidos por ser difíciles de utilizar, las agrupaciones Storm son fácilmente manejables. Tolerante a fallos: En caso de anomalías durante la ejecución de sus cálculos, Storm volverá a asignar tareas según sea necesario. La plataforma se asegura de que un cálculo puede ejecutarse siempre. Un clúster Storm es aparentemente similar a un clúster Hadoop, teniendo en cuenta que, sobre Hadoop se ejecutan «trabajos MapReduce», y en Storm «topologías». Los «trabajos (jobs en Hadoop)» y «topologías» en sí son muy diferentes, una diferencia clave es que un Job MapReduce termina, mientras que una topología está procesando los datos de entrada en todo momento (o hasta que el usuario mata el proceso). Las «topologías» no son más que grafos de computación. Cada nodo en una topología contiene la lógica de procesamiento y los enlaces entre los nodos indican cómo se deben transportar los datos entre los nodos colindantes. Hay dos clases de nodos en un clúster Storm: el nodo maestro (master node) y los nodos de trabajo (worker node). El nodo principal ejecuta un demonio (o servicio) llamado «Nimbus» similar al «JobTracker» de Hadoop. Nimbus es responsable de la distribución de código en todo el clúster, la asignación de tareas a las máquinas y el seguimiento de los fallos. Cada nodo de trabajo (worker node) ejecuta un servicio llamado «Supervisor». El supervisor supervisa el trabajo asignado a su máquina e inicia y detiene los procesos del worker cuando sea necesario, sobre la base de lo que el nodo Nimbus ha asignado. Cada proceso worker realiza la ejecución de un subconjunto de una topología. Una topología completa consiste en muchos procesos worker repartidos en múltiples máquinas. Toda la coordinación entre Nimbus y los supervisores se realiza a través de un clúster Zookeeper (servicio centralizado para el mantenimiento de información relativa a configuración ya explicado antes). Además, el demonio de Nimbus y el de Supervisor no guardan ningún estado. Todo el estado se mantiene en Zookeeper o en el disco local. Esto significa que se pueden parar el Nimbus o los supervisores y se iniciará automáticamente una copia de seguridad. Este diseño provoca que Storm sea enormemente estable. Topología Storm Ambari Ambari es una herramienta basada en web para el aprovisionamiento, administración y seguimiento de clústeres Apache Hadoop, que incluye soporte para Hadoop HDFS, Hadoop MapReduce, Colmena, HCatalog, HBase, ZooKeeper, Oozie, Pig y Sqoop. Ambari también proporciona un panel de control para la visualización del estado del clúster, así como la capacidad de ver aplicaciones como MapReduce, Pig, etc. con el objetivo de evaluar su rendimiento de una manera sencilla. Ambari permite el seguimiento gráfico y entorno de gestión para Hadoop y especialmente para configurar Hadoop en sus máquinas virtuales. HDFS HDFS, ya explicado en un punto anterior, es un sistema de ficheros pensado para almacenar grandes cantidades de información, del orden de terabytes o petabytes, tolerante a fallos y diseñado para ser instalado en máquinas de bajo coste. La información es dividida en bloques, que son almacenados y replicados en los discos locales de los nodos del clúster. Yarn Uno de los problemas fundamentales que presenta Hadoop 1.0 es que solo admite el paradigma de programación MapReduce. A pesar de que este modelo de programación es apropiado para el análisis de grandes conjuntos de datos, en ocasiones es necesario realizar otro tipo de análisis, pero aprovechándonos de la ventaja que proporciona un clúster Hadoop. Para intentar solventar este inconveniente surge YARN. Apache Hadoop YARN es un subproyecto de Hadoop en la Apache Software Foundation introducido en la versión Hadoop 2.0 que separa la gestión de recursos de los componentes de procesamiento. La arquitectura de Hadoop 2.0 basada en YARN provee una plataforma de procesamiento más general y no restringido a MapReduce. En Hadoop 2.0, YARN toma las capacidades de gestión de los recursos que residían en MapReduce y las empaqueta para que puedan ser utilizados por los nuevos motores de procesado. Con YARN, se permite ejecutar varias aplicaciones en Hadoop, todos compartiendo una gestión común de los recursos. MapReduce se convierte ahora en una librería Hadoop es decir una aplicación que reside en Hadoop y deja la gestión de recursos del clúster para el componente YARN. En la figura se muestra la evolución de los principales componentes de Hadoop. Arquitectura Hadoop V1.0 vs Hadoop 2.0 La aparición de YARN provoca el desarrollo de nuevas herramientas que cubren múltiples necesidades que únicamente con MapReduce no se podían completar. Nuevas herramientas con YARN Hadoop 2.0: Arquitectura básica La idea fundamental de YARN es la de separar las dos mayores responsabilidades del JobTracker: la gestión de los recursos y la planificación/monitorización de las tareas en dos servicios separados, para ello tendremos dos nuevos componentes en YARN: un ResourceManager global y un ApplicationMaster por aplicación (AM). Surgen así el ResourceManager para el master (sustituyendo al JobTracker) y un NodeManager (sustituyendo al TaskTracker) por cada slave. Además surge un componente llamado container que representa los recursos disponibles en cada nodo del clúster. Por su parte Hadoop 3.0 incluye nuevas mejoras a la plataforma como federación de HDFS, o mejoras en YARN o HDFS. Flume Flume es un producto que forma parte del ecosistema Hadoop, y conforma una solución Java distribuida y de alta disponibilidad para recolectar, agregar y mover grandes cantidades de datos desde diferentes fuentes a un data store centralizado. Flume se utiliza para recopilar grandes cantidades de datos de registro (logs de sistemas) en servidores distribuidos. Una arquitectura Flume se compone de nodos agente y de colectores. Los nodos agente se instalan en los servidores y son responsables de la gestión de la forma en que un único flujo de datos se transfiere y se procesa desde su punto de inicio hasta su punto de destino. Por otro lado, los colectores se utilizan para agrupar los flujos de datos en flujos más grandes que se pueden escribir a un sistema de archivos Hadoop u otro gran contenedor de almacenamiento de datos. Flume está diseñado para la escalabilidad y puede añadir continuamente más recursos a un sistema para manejar grandes cantidades de datos de manera eficiente. La salida del Canal de flujo puede ser integrada con Hadoop Hive para el análisis de los datos. Flume también tiene la posibilidad de aplicar elementos de transformación sobre los datos. Plataforma Flume Avro Avro se trata de un sistema de serialización de datos que provee numerosas estructuras de datos, un formato de datos binario compacto y rápido, un archivo contenedor para almacenar datos persistentes y una sencilla integración con lenguajes dinámicos. Utiliza JSON para la definición de los tipos de datos y protocolos, y serializa los datos en un formato binario compacto. OOzie Apache Oozie es una librería que nos permite definir una secuencia de ejecución de jobs Hadoop. Con Oozie se define en un fichero XML de configuración un flujo de trabajo que definirá una secuencia, en la cual se irán ejecutando las tareas Hadoop que indiquemos definiendo que hacer en caso de que las tareas se ejecuten de manera exitosa o no. El fichero de configuración no es otra cosa que un grafo aciclico directo de acciones formado por distintos nodos. Tiene bastante parecido en cuanto al formato de los diagramas de flujo a Spring Webflow, ya que podemos definir nodos de acción y las transiciones asociadas al resultado de la salida de esas acciones. Flujo de trabajos con Oozie Sqoop Sqoop Apache Project es una utilidad de código abierto basada en JDBC que sirve para mover datos de Hadoop a base de datos relacionales. Mover datos de HDFS hacia una base de datos relacional es un caso de uso común. Para consultas sencillas o almacenamiento del back-end de un sitio web, almacenar la salida de Map-Reduce en un almacenamiento relacional puede ser un buen patrón de diseño. Uso de Sqoop Spark Apache Spark es un sistema de computación en clúster de propósito general, desarrollado en Scala, muy similar a la computación de altas prestaciones (HPC) de Open MPI por cómo se configura, su ejecución en clúster o su arquitectura. Tiene ventajas sobre Hadoop ya que Spark fue diseñado para soportar en memoria algoritmos iterativos que se pudiesen ejecutar sin escribir un conjunto de resultados cada vez que se procesaba un dato, lo que le permite velocidades 100 veces mayores a las conseguidas usando MapReduce. Además Spark soporta flujo de datos acíclicos pudiendo configurar tareas con más de una etapa de trabajo (Recordemos que MapReduce solo tiene 2 estados predefinidos Map y Reduce). Otra ventaja de Spark es que entiende SQL y a través del módulo Spark SQL es capaz de usar fuentes de datos existentes (Hive, Cassandra, Mongo, JDBC, etc.). Spark forma parte de la arquitectura Kappa (Kafka, Spark, NoSQL y Scala). Arquitectura Spark El modelo de datos utilizado por Apache Spark se denomina “Resilient Distributed Datasets” (RDDs). Estas estructuras de datos no son más que arrays, lo que permite minimizar el ancho de banda necesario para los paquetes enviados entre el Driver Program y los Work Nodes. Apache Spark permite dos tipos de operaciones: Las transformaciones: que se podrían definir como la creación de un dataset o modificación de uno existente. Estas operaciones se ejecutan en modo lazy, es decir, se ejecutarán verdaderamente cuando se lleve a cabo una acción. Las acciones: consisten en aplicar una operación sobre un RDD y obtener un valor como resultado, que dependerá del tipo de operación. Con el fin de mejorar el rendimiento entre operaciones, se permite la persistencia o el almacenamiento en caché de un RDD entre operaciones. Tez Tez es un proyecto que quiere aprovechar las posibilidades de YARN (el MapReduce versión 2) para aplicar Map Reduce (y otros algoritmos) desde una perspectiva de grafos. En la práctica supone, entre otras cosas, que se puede optimizar el I/O mediante la no necesidad de datos intermedios en algunas partes. Aunque lo que más llama la atención, es la flexibilidad que ofrece: un map o un reduce típicos, son simplemente un DAG compuesto de Input, Output y Processor. Giraph Apache Giraph es un proyecto de Apache para realizar procesamiento sobre grafos de grandes volúmenes de datos aplicando MapReduce de Hadoop. Facebook utiliza Giraph con algunas mejoras de rendimiento para analizar 1 billón de aristas de grafos utilizando 200 máquinas en 4 minutos. Chukwa Apache Chukwa sirve para recolectar logs de grandes sistemas para su control, análisis y visualización. Hadoop MapReduce está más enfocado a trabajar con un pequeño número de ficheros muy grandes frente a los logs, que son ficheros incrementales generados en muchas máquinas. Chukwa subsana esa deficiencia en el ecosistema Hadoop. Tratamiento de logs con Chukwa Chukwa tiene 4 componentes principales: 1. Agentes que corren en cada máquina en la que se generan los logs que se quieren transferir. 2. Colectores que se encargan de recolectar los logs de varios agentes en un fichero Data Sink en HDFS (por defecto en hdfs:///chukwa/logs). Cada Sink File es un fichero Hadoop que contiene un grupo de claves-valor y marcadores para facilitar el acceso MapReduce. Los Data Sinks se renombran y mueven después de un umbral y los logs se escriben en el siguiente fichero Data Sink. Si el fichero acaba en ‘.chukwa’ aún está procesándose, cuando el colector cierra el fichero lo renombra a .done. 3. Jobs Map Reduce de Chukwa: se encargan de procesar los ficheros .done. Pueden ser de dos tipos: Archive Jobs: Se encarga de consolidar un conjunto grande de ficheros Data Sink en un número menor de ficheros, agrupados de una forma más útil. Demux Jobs: Permite procesar los datos que van llegando en paralelo usando MapReduce. 4. HICC (Hadoop Infrastructure Care Center) que es un interfaz Web al estilo portal para mostrar los datos. Kafka Apache Kafka es un sistema de mensajería distribuido de alto rendimiento que se fundamenta en el uso de TOPIC, fusionando de este modo las colas y tópicos que conocemos de JMS en un único recurso. Los consumidores se etiquetan a sí mismos con un nombre de grupo y cada mensaje publicado en un TOPIC es entregado a un solo consumidor dentro de cada grupo: Si todos los consumidores tienen el mismo nombre de grupo, funcionará como una cola en la cual se balancean los mensajes entre consumidores. Si todos los consumidores tienen diferentes nombres de grupo, funcionará como un tópico y todos los mensajes serán enviados a todos los consumidores en modo broadcast. Distribuciones Hadoop La arquitectura modular y flexible de Hadoop permite añadir nuevas funcionalidades para la realización de diversas tareas de Big Data. Un número de proveedores se han aprovechado del marco abierto de Hadoop para introducir distribuciones con mejoras en las funcionalidades y solucionar algunos de los inconvenientes inherentes de Apache Hadoop. Entre ellas destacamos las siguientes: Cloudera: Fue la primera empresa en desarrollar y distribuir software basado en Apache Hadoop y la que tiene la mayor base de usuarios. Aunque el núcleo de la distribución se basa en Apache Hadoop, también proporciona una Suite de Gestión propietaria para automatizar el proceso de instalación y proporcionar otros servicios que mejoran la comodidad de los usuarios y que incluyen la reducción de tiempo de implementación, despliegue de nodos e tiempo real, etc. HortonWorks: Fundada en 2011, se ha convertido en uno de los principales proveedores de Hadoop. La distribución proporciona la plataforma Apache Hadoop para el análisis, almacenamiento y gestión de Big Data. HortonWorks es el único proveedor que distribuye la plataforma hadoop sin software propietario adicional. Los ingenieros de Hortonworks están detrás de la mayoría de las innovaciones recientes Hadoop incluyendo Yarn. MapR: Reemplaza el componente HDFS y usa un sistema de archivos propio llamado MapRFS que ayuda a incorporar características de nivel empresarial a Hadoop y con ello una gestión más eficiente, fiable y sencilla de los datos. MapR se integra con Ubuntu. MapR es gratuita, pero la versión libre carece de algunas de las características propietarias importantes. Otras herramientas de Big Data distintas a Hadoop R: es un lenguaje y entorno de programación para análisis estadístico y gráfico. Se trata de un proyecto de software libre resultado de la implementación GNU del premiado lenguaje S. Orientado a objetos e interpretado. El paquete Rhadoop, permite ejecutar en R en un clúster Hadoop (formado por 4 paquetes implementados y testeados por la empresa Cloudera). SAS: conjunto de software estadístico desarrollado por el SAS Institute para el análisis avanzado de datos, Business Intelligence (inteligencia de negocio), manejo de datos y análisis predictivos. Es uno de los softwares más utilizados en el mundo empresarial para el análisis de datos. Tiene varios módulos: el BASICO (BASE), que permite la manipulación de datos y obtener algunas tablas y medidas básicas, el STAT, que permite realizar los más variados análisis estadísticos y el IML, el cual es un lenguaje matricial muy similar a GAUSS o a MatLab. Entre otros módulos existe el OR, para investigación de operaciones, el QC, para control de calidad, el ETS, para el análisis de series de tiempo, y muchos otros. Inclusive el Instituto SAS ofrece un compilador propio de C++ para el desarrollo de programas que puedan integrarse al sistema SAS creado por el propio usuario. SPSS: es un programa estadístico informático muy usado en las ciencias sociales (originalmente SPSS fue creado como el acrónimo de “Statistical Package for the Social Sciences” o «Statistical Product and Service Solutions», ahora ya no significa nada) y las empresas de investigación de mercado. Esta desarrollado en JAVA y es propiedad de IBM. Al igual que el resto de las aplicaciones que utilizan como soporte el sistema operativo Windows, SPSS funciona mediante menús desplegables y cuadros de diálogo que permiten hacer la mayor parte del trabajo simplemente utilizando el puntero del ratón. El programa consiste en un módulo base y módulos anexos que se han ido actualizando constantemente con nuevos procedimientos estadísticos. Cada uno de estos módulos se compra por separado como en el caso de la herramienta anteriormente descrita SAS. Originalmente creado para grandes computadores. Las librerías SPSS se pueden utilizar desde diversos lenguajes: Python, Visual Basic, C++, … DISCO PROJECT: se trata de un framework de código abierto para computación distribuida basado en el paradigma de programación MapReduce. Soporta computación paralela sobre grandes conjuntos de datos y almacenamiento seguro en clúster de computadoras. Esto hace que sea una herramienta perfecta para el análisis y el procesamiento de grandes conjuntos de datos, sin tener que p