La informática intensiva en datos es una clase de aplicaciones informáticas paralelas que utilizan un enfoque de datos paralelos para procesar grandes volúmenes de datos, normalmente de terabytes o petabytes , y que normalmente se denominan big data . Las aplicaciones informáticas que dedican la mayor parte de su tiempo de ejecución a requisitos computacionales se consideran informáticas intensivas, mientras que las aplicaciones que se consideran intensivas en datos requieren grandes volúmenes de datos y dedican la mayor parte de su tiempo de procesamiento a E/S y manipulación de datos. [1]
El rápido crecimiento de Internet y la World Wide Web generó grandes cantidades de información disponible en línea. Además, las organizaciones empresariales y gubernamentales crean grandes cantidades de información tanto estructurada como no estructurada , que debe procesarse, analizarse y vincularse. Vinton Cerf calificó esto de “avalancha de información” y afirmó que “debemos aprovechar la energía de Internet antes de que la información que ha desatado nos entierre”. [2] Un informe técnico de IDC patrocinado por EMC Corporation estimó la cantidad de información actualmente almacenada en formato digital en 2007 en 281 exabytes y la tasa de crecimiento compuesta general en 57%, con la información en las organizaciones creciendo a un ritmo incluso más rápido. [3] En un estudio de 2003 sobre la llamada explosión de la información, se estimó que el 95% de toda la información actual existe en forma no estructurada con mayores requisitos de procesamiento de datos en comparación con la información estructurada. [4] El almacenamiento, la gestión, el acceso y el procesamiento de esta gran cantidad de datos representa una necesidad fundamental y un inmenso desafío para satisfacer las necesidades de buscar, analizar, extraer y visualizar estos datos como información. [5] La informática intensiva en datos pretende abordar esta necesidad.
Los enfoques de procesamiento paralelo generalmente se pueden clasificar como intensivos en computación o intensivos en datos . [6] [7] [8] Computación intensiva se utiliza para describir programas de aplicación que están vinculados a la computación. Estas aplicaciones dedican la mayor parte de su tiempo de ejecución a requisitos computacionales en lugar de E/S y, por lo general, requieren pequeños volúmenes de datos. El procesamiento paralelo de aplicaciones de computación intensiva generalmente implica paralelizar algoritmos individuales dentro de un proceso de aplicación y descomponer el proceso general de la aplicación en tareas separadas, que luego se pueden ejecutar en paralelo en una plataforma informática adecuada para lograr un rendimiento general mayor que el procesamiento en serie. En aplicaciones de computación intensiva, se realizan múltiples operaciones simultáneamente, y cada operación aborda una parte particular del problema. A esto se le suele denominar paralelismo de tareas .
El uso intensivo de datos se utiliza para describir aplicaciones que están vinculadas a E/S o que necesitan procesar grandes volúmenes de datos. [9] Estas aplicaciones dedican la mayor parte de su tiempo de procesamiento a la E/S y al movimiento y manipulación de datos. El procesamiento paralelo de aplicaciones con uso intensivo de datos normalmente implica dividir o subdividir los datos en múltiples segmentos que se pueden procesar de forma independiente utilizando el mismo programa de aplicación ejecutable en paralelo en una plataforma informática adecuada y luego volver a ensamblar los resultados para producir los datos de salida completos. [10] Cuanto mayor sea la distribución agregada de los datos, mayor será el beneficio del procesamiento paralelo de los datos. Los requisitos de procesamiento intensivo de datos normalmente escalan linealmente según el tamaño de los datos y son muy susceptibles de una paralelización sencilla. Los desafíos fundamentales para la informática con uso intensivo de datos son la gestión y el procesamiento de volúmenes de datos en crecimiento exponencial, la reducción significativa de los ciclos de análisis de datos asociados para respaldar aplicaciones prácticas y oportunas y el desarrollo de nuevos algoritmos que puedan escalarse para buscar y procesar cantidades masivas de datos. Los investigadores acuñaron el término BORPS para "miles de millones de registros por segundo" para medir la velocidad de procesamiento de registros de una manera análoga a cómo se aplica el término MIPS para describir la velocidad de procesamiento de las computadoras. [11]
A principios de la década de 2000 se promovieron arquitecturas de sistemas informáticos que pueden admitir aplicaciones de datos paralelas para satisfacer las necesidades de procesamiento de datos a gran escala de la informática con uso intensivo de datos. [12] El paralelismo de datos aplicó la computación de forma independiente a cada elemento de un conjunto de datos, lo que permite escalar el grado de paralelismo con el volumen de datos. La razón más importante para desarrollar aplicaciones de datos paralelos es el potencial de rendimiento escalable y puede dar como resultado una mejora del rendimiento de varios órdenes de magnitud. Los problemas clave con el desarrollo de aplicaciones que utilizan el paralelismo de datos son la elección del algoritmo, la estrategia para la descomposición de datos, el equilibrio de carga en los nodos de procesamiento, las comunicaciones de paso de mensajes entre nodos y la precisión general de los resultados. [13] El desarrollo de una aplicación paralela de datos puede implicar una complejidad de programación sustancial para definir el problema en el contexto de las herramientas de programación disponibles y abordar las limitaciones de la arquitectura de destino. La extracción de información y la indexación de documentos web es típica de la informática con uso intensivo de datos, que puede obtener importantes beneficios de rendimiento de implementaciones de datos paralelas, ya que la web y otros tipos de colecciones de documentos normalmente pueden procesarse en paralelo. [14]
La Fundación Nacional de Ciencias de EE. UU. (NSF) financió un programa de investigación entre 2009 y 2010. [15] Las áreas de interés fueron:
Pacific Northwest National Labs definió la informática con uso intensivo de datos como "capturar, gestionar, analizar y comprender datos en volúmenes y velocidades que traspasan las fronteras de las tecnologías actuales". [16] [17]
Las plataformas informáticas con uso intensivo de datos suelen utilizar un enfoque informático paralelo que combina múltiples procesadores y discos en grandes grupos informáticos básicos conectados mediante conmutadores y redes de comunicaciones de alta velocidad, lo que permite dividir los datos entre los recursos informáticos disponibles y procesarlos de forma independiente para lograr rendimiento y escalabilidad. en función de la cantidad de datos. Un clúster se puede definir como un tipo de sistema paralelo y distribuido , que consiste en una colección de computadoras independientes interconectadas que trabajan juntas como un único recurso informático integrado. [18] Este enfoque de procesamiento paralelo a menudo se denomina enfoque de “nada compartido”, ya que cada nodo que consta de recursos de procesador, memoria local y disco no comparte nada con otros nodos del clúster. En la computación paralela, este enfoque se considera adecuado para la computación con uso intensivo de datos y para problemas que son "vergonzosamente paralelos", es decir, donde es relativamente fácil separar el problema en una serie de tareas paralelas y no se requiere dependencia o comunicación entre las otras tareas. que la gestión global de las tareas. Estos tipos de problemas de procesamiento de datos son inherentemente adaptables a diversas formas de computación distribuida , incluidos clústeres, redes de datos y computación en la nube .
Varias características comunes de los sistemas informáticos con uso intensivo de datos los distinguen de otras formas de informática:
Se han implementado una variedad de arquitecturas de sistemas para aplicaciones de computación con uso intensivo de datos y de análisis de datos a gran escala, incluidos sistemas de gestión de bases de datos relacionales distribuidos y paralelos que han estado disponibles para ejecutarse en grupos de nodos de procesamiento compartidos durante más de dos décadas. [22] Sin embargo, la mayor parte del crecimiento de datos se produce con datos en forma no estructurada y se necesitaban nuevos paradigmas de procesamiento con modelos de datos más flexibles. Han surgido varias soluciones, incluida la arquitectura MapReduce de la que Google fue pionera y ahora disponible en una implementación de código abierto llamada Hadoop utilizada por Yahoo , Facebook y otros. LexisNexis Risk Solutions también desarrolló e implementó una plataforma escalable para computación con uso intensivo de datos que utiliza LexisNexis .
La arquitectura y el modelo de programación MapReduce del que Google fue pionero es un ejemplo de una arquitectura de sistemas moderna diseñada para computación con uso intensivo de datos. [23] La arquitectura MapReduce permite a los programadores usar un estilo de programación funcional para crear una función de mapa que procesa un par clave-valor asociado con los datos de entrada para generar un conjunto de pares clave-valor intermedios y una función de reducción que fusiona todos los intermedios. valores asociados con la misma clave intermedia. Dado que el sistema se encarga automáticamente de detalles como dividir los datos de entrada, programar y ejecutar tareas en un clúster de procesamiento y administrar las comunicaciones entre nodos, los programadores sin experiencia en programación paralela pueden utilizar fácilmente un gran entorno de procesamiento distribuido.
El modelo de programación para la arquitectura MapReduce es una abstracción simple donde el cálculo toma un conjunto de pares clave-valor de entrada asociados con los datos de entrada y produce un conjunto de pares clave-valor de salida. En la fase de Mapa, los datos de entrada se dividen en divisiones de entrada y se asignan a tareas de Mapa asociadas con los nodos de procesamiento en el clúster. La tarea de mapa normalmente se ejecuta en el mismo nodo que contiene su partición de datos asignada en el clúster. Estas tareas de Mapa realizan cálculos especificados por el usuario en cada par clave-valor de entrada de la partición de datos de entrada asignados a la tarea y generan un conjunto de resultados intermedios para cada clave. Luego, la fase de reproducción aleatoria y clasificación toma los datos intermedios generados por cada tarea de Mapa, clasifica estos datos con datos intermedios de otros nodos, divide estos datos en regiones para ser procesados por las tareas de reducción y distribuye estos datos según sea necesario a los nodos donde se realiza la Reducción. se ejecutarán las tareas. Las tareas de Reducción realizan operaciones adicionales especificadas por el usuario en los datos intermedios, posiblemente fusionando valores asociados con una clave con un conjunto más pequeño de valores para producir los datos de salida. Para procedimientos de procesamiento de datos más complejos, se pueden vincular varias llamadas a MapReduce en secuencia.
Apache Hadoop es un proyecto de software de código abierto patrocinado por The Apache Software Foundation que implementa la arquitectura MapReduce. Hadoop ahora abarca múltiples subproyectos además del núcleo base, MapReduce y el sistema de archivos distribuido HDFS. Estos subproyectos adicionales proporcionan capacidades mejoradas de procesamiento de aplicaciones para la implementación básica de Hadoop y actualmente incluyen Avro, Pig , HBase , ZooKeeper , Hive y Chukwa. La arquitectura Hadoop MapReduce es funcionalmente similar a la implementación de Google excepto que el lenguaje de programación base para Hadoop es Java en lugar de C++ . La implementación está destinada a ejecutarse en grupos de procesadores de productos básicos.
Hadoop implementa un marco y entorno de ejecución y programación de procesamiento de datos distribuidos para trabajos de MapReduce. Hadoop incluye un sistema de archivos distribuido llamado HDFS que es análogo a GFS en la implementación de Google MapReduce. El entorno de ejecución de Hadoop admite capacidades adicionales de procesamiento de datos distribuidos que están diseñadas para ejecutarse utilizando la arquitectura Hadoop MapReduce. Estos incluyen HBase , una base de datos distribuida orientada a columnas que proporciona capacidades de lectura/escritura de acceso aleatorio; Hive, que es un sistema de almacenamiento de datos construido sobre Hadoop que proporciona capacidades de consulta similares a SQL para resumen de datos, consultas ad hoc y análisis de grandes conjuntos de datos; y Pig, un lenguaje de programación de flujo de datos de alto nivel y un marco de ejecución para computación con uso intensivo de datos.
Pig fue desarrollado en Yahoo! para proporcionar una notación de lenguaje específica para aplicaciones de análisis de datos y para mejorar la productividad del programador y reducir los ciclos de desarrollo cuando se utiliza el entorno Hadoop MapReduce. Los programas Pig se traducen automáticamente en secuencias de programas MapReduce si es necesario en el entorno de ejecución. Pig proporciona capacidades en el lenguaje para cargar, almacenar, filtrar, agrupar, deduplicar, ordenar, clasificar, agregar y unir operaciones en los datos. [24]
HPCC (Clúster de Computación de Alto Rendimiento) fue desarrollado e implementado por LexisNexis Risk Solutions. El desarrollo de esta plataforma informática comenzó en 1999 y las aplicaciones estaban en producción a finales de 2000. El enfoque HPCC también utiliza grupos básicos de hardware que ejecutan el sistema operativo Linux . Se desarrollaron componentes de software y middleware de sistema personalizados y se colocaron en capas sobre el sistema operativo Linux base para proporcionar el entorno de ejecución y el soporte del sistema de archivos distribuido necesarios para la informática con uso intensivo de datos. LexisNexis también implementó un nuevo lenguaje de alto nivel para computación con uso intensivo de datos.
El lenguaje de programación ECL es un lenguaje de alto nivel, declarativo, centrado en datos e implícitamente paralelo que permite al programador definir cuál debe ser el resultado del procesamiento de datos y los flujos de datos y transformaciones que son necesarios para lograr el resultado. El lenguaje ECL incluye amplias capacidades para la definición, filtrado, gestión y transformación de datos, y proporciona un amplio conjunto de funciones integradas para operar en registros en conjuntos de datos que pueden incluir funciones de transformación definidas por el usuario. Los programas ECL se compilan en código fuente C++ optimizado , que posteriormente se compila en código ejecutable y se distribuye a los nodos de un clúster de procesamiento.
Para abordar aplicaciones informáticas con uso intensivo de datos tanto en lotes como en línea, HPCC incluye dos entornos de clúster distintos, cada uno de los cuales se puede optimizar de forma independiente para su propósito de procesamiento de datos en paralelo. La plataforma Thor es un clúster cuyo propósito es ser una refinería de datos para procesar volúmenes masivos de datos sin procesar para aplicaciones como limpieza e higiene de datos, extracción, transformación, carga (ETL), vinculación de registros y resolución de entidades, ad hoc a gran escala. análisis de datos y creación de datos e índices clave para respaldar consultas estructuradas de alto rendimiento y aplicaciones de almacenamiento de datos. Un sistema Thor es similar a la plataforma Hadoop MapReduce en su configuración de hardware, función, entorno de ejecución, sistema de archivos y capacidades, pero proporciona un mayor rendimiento en configuraciones equivalentes. La plataforma Roxie proporciona un sistema de análisis y consultas estructuradas en línea de alto rendimiento o un almacén de datos que cumple con los requisitos de procesamiento de acceso a datos paralelos de las aplicaciones en línea a través de interfaces de servicios web que admiten miles de consultas y usuarios simultáneos con tiempos de respuesta inferiores a un segundo. Un sistema Roxie es similar en su función y capacidades a Hadoop con capacidades HBase y Hive agregadas, pero proporciona un entorno de ejecución optimizado y un sistema de archivos para un procesamiento en línea de alto rendimiento. Tanto el sistema Thor como el Roxie utilizan el mismo lenguaje de programación ECL para implementar aplicaciones, lo que aumenta la productividad del programador.