La computación intensiva en datos es una clase de aplicaciones de computación paralela que utilizan un enfoque de datos paralelos para procesar grandes volúmenes de datos, normalmente de terabytes o petabytes de tamaño y que suelen denominarse big data . Las aplicaciones informáticas que dedican la mayor parte de su tiempo de ejecución a los requisitos computacionales se consideran intensivas en computación, 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 la E/S y la manipulación de datos. [1]
El rápido crecimiento de Internet y la World Wide Web ha dado lugar a la disponibilidad de grandes cantidades de información en línea. Además, las organizaciones empresariales y gubernamentales crean grandes cantidades de información estructurada y no estructurada , que es necesario procesar, analizar y vincular. Vinton Cerf describió esto como una “avalancha de información” y afirmó: “Debemos aprovechar la energía de Internet antes de que la información que ha liberado nos sepulte”. [2] Un informe técnico de IDC patrocinado por EMC Corporation estimó que la cantidad de información almacenada actualmente en formato digital en 2007 era de 281 exabytes y la tasa de crecimiento compuesta general era del 57%, con una tasa de crecimiento de la información en las organizaciones incluso más rápida. [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 enorme cantidad de datos representan una necesidad fundamental y un desafío inmenso para satisfacer las necesidades de búsqueda, análisis, extracción y visualización de estos datos como información. [5] La computación intensiva en datos tiene como objetivo abordar esta necesidad.
Los enfoques de procesamiento paralelo se pueden clasificar generalmente como intensivos en computación o intensivos en datos . [6] [7] [8] El uso intensivo de computación se utiliza para describir programas de aplicación que están limitados por la computación. Dichas aplicaciones dedican la mayor parte de su tiempo de ejecución a requisitos computacionales en lugar de E/S, y normalmente requieren pequeños volúmenes de datos. El procesamiento paralelo de aplicaciones intensivas en computación generalmente implica paralelizar algoritmos individuales dentro de un proceso de aplicación y descomponer el proceso de aplicación general en tareas separadas, que luego se pueden ejecutar en paralelo en una plataforma informática adecuada para lograr un rendimiento general más alto que el procesamiento en serie. En aplicaciones intensivas en computación, se realizan múltiples operaciones simultáneamente, y cada operación aborda una parte particular del problema. Esto a menudo se conoce como paralelismo de tareas .
El término "intensivo en datos" se utiliza para describir aplicaciones que están limitadas por E/S o que necesitan procesar grandes volúmenes de datos. [9] Dichas aplicaciones dedican la mayor parte de su tiempo de procesamiento a E/S y al movimiento y manipulación de datos. El procesamiento paralelo de aplicaciones intensivas en datos generalmente implica la partición o subdivisión de 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 reensamblar 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 de acuerdo con el tamaño de los datos y son muy susceptibles a una paralelización sencilla. Los desafíos fundamentales para la computación intensiva en datos son la gestión y el procesamiento de volúmenes de datos que crecen exponencialmente, 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 escalar 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]
Las arquitecturas de sistemas informáticos que pueden soportar aplicaciones de datos en paralelo se promovieron a principios de la década de 2000 para los requisitos de procesamiento de datos a gran escala de la computación intensiva en datos. [12] El paralelismo de datos aplicó el cálculo de forma independiente a cada elemento de datos de un conjunto de datos, lo que permite que el grado de paralelismo se escale con el volumen de datos. La razón más importante para desarrollar aplicaciones de datos en paralelo 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 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 de datos en paralelo puede implicar una complejidad de programación sustancial para definir el problema en el contexto de las herramientas de programación disponibles y para 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 computación intensiva en datos que puede derivar importantes beneficios de rendimiento a partir de las implementaciones de datos en paralelo, ya que la Web y otros tipos de colecciones de documentos normalmente se pueden procesar en paralelo. [14]
La Fundación Nacional de Ciencias de Estados Unidos (NSF) financió un programa de investigación entre 2009 y 2010. [15] Las áreas de enfoque fueron:
Los Laboratorios Nacionales del Pacífico Noroeste definieron la computación intensiva en datos como “capturar, gestionar, analizar y comprender datos en volúmenes y velocidades que amplían las fronteras de las tecnologías actuales”. [16] [17]
Las plataformas informáticas intensivas en datos suelen utilizar un enfoque de computación paralela que combina múltiples procesadores y discos en grandes clústeres informáticos básicos conectados mediante conmutadores y redes de comunicaciones de alta velocidad que permiten que los datos se dividan entre los recursos informáticos disponibles y se procesen de forma independiente para lograr un rendimiento y una escalabilidad basados en 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 conoce como un enfoque de "nada compartido", ya que cada nodo que consta de procesador, memoria local y recursos de disco no comparte nada con otros nodos del clúster. En la computación paralela, este enfoque se considera adecuado para la computación intensiva en datos y los 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 tareas que no sea la gestión general de las tareas. Estos tipos de problemas de procesamiento de datos son inherentemente adaptables a varias 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 intensivos en datos los distinguen de otras formas de computación:
Se han implementado diversas arquitecturas de sistemas para aplicaciones de computación intensiva en datos y 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 clústeres de nodos de procesamiento compartidos durante más de dos décadas. [21] Sin embargo, la mayor parte del crecimiento de los 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 iniciada por Google 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 intensiva en datos que utiliza LexisNexis .
La arquitectura y el modelo de programación MapReduce , desarrollados por Google, son un ejemplo de una arquitectura de sistemas moderna diseñada para la computación intensiva en datos. [22] La arquitectura MapReduce permite a los programadores utilizar 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 valores intermedios asociados con la misma clave intermedia. Dado que el sistema se encarga automáticamente de detalles como la partición de los datos de entrada, la programación y ejecución de tareas en un clúster de procesamiento y la gestión de 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 de 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 Map, los datos de entrada se dividen en divisiones de entrada y se asignan a tareas de Map asociadas con nodos de procesamiento en el clúster. La tarea de Map normalmente se ejecuta en el mismo nodo que contiene su partición asignada de datos en el clúster. Estas tareas de Map realizan cálculos especificados por el usuario en cada par clave-valor de entrada de la partición de datos de entrada asignada a la tarea y generan un conjunto de resultados intermedios para cada clave. Luego, la fase de mezcla y ordenación toma los datos intermedios generados por cada tarea de Map, ordena estos datos con datos intermedios de otros nodos, divide estos datos en regiones que serán procesadas por las tareas de reducción y distribuye estos datos según sea necesario a los nodos donde se ejecutarán las tareas de reducción. Las tareas de reducción realizan operaciones adicionales especificadas por el usuario en los datos intermedios, posiblemente fusionando valores asociados con una clave en 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 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 varios subproyectos además del núcleo base, MapReduce y el sistema de archivos distribuido HDFS. Estos subproyectos adicionales proporcionan capacidades de procesamiento de aplicaciones mejoradas a la implementación base 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 clústeres de procesadores básicos.
Hadoop implementa un entorno de ejecución y programación de procesamiento de datos distribuidos y un marco 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. Estas 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 intensiva en 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 de los programadores y reducir los ciclos de desarrollo al utilizar 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 sobre los datos. [23]
LexisNexis Risk Solutions desarrolló e implementó HPCC (High-Performance Computing Cluster) . El desarrollo de esta plataforma informática comenzó en 1999 y las aplicaciones ya estaban en producción a fines de 2000. El enfoque HPCC también utiliza clústeres de hardware de productos básicos que ejecutan el sistema operativo Linux . Se desarrollaron componentes de middleware y software de sistema personalizados y se colocaron en capas sobre el sistema operativo Linux base para proporcionar el entorno de ejecución y el soporte de sistema de archivos distribuido necesarios para la computación intensiva en datos. LexisNexis también implementó un nuevo lenguaje de alto nivel para la computación intensiva en datos.
El lenguaje de programación ECL es un lenguaje de alto nivel, declarativo, centrado en los 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 las transformaciones que son necesarias para lograr el resultado. El lenguaje ECL incluye amplias capacidades para la definición, el filtrado, la gestión y la transformación de datos, y proporciona un amplio conjunto de funciones integradas para operar en registros de 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 tanto los aspectos en línea como por lotes de las aplicaciones informáticas intensivas en datos, 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, análisis ad hoc a gran escala 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 consulta estructurada en línea de alto rendimiento o un almacén de datos que satisface los requisitos de procesamiento de acceso a datos en paralelo 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 sus funciones y capacidades a Hadoop con capacidades HBase y Hive agregadas, pero proporciona un entorno de ejecución optimizado y un sistema de archivos para el procesamiento en línea de alto rendimiento. Tanto los sistemas Thor como Roxie utilizan el mismo lenguaje de programación ECL para implementar aplicaciones, lo que aumenta la productividad del programador.