Un Conjunto de Datos Distribuido Resiliente (RDD) es una colección de elementos inmutable y tolerante a fallas que se pueden distribuir en varios nodos de cluster para procesarlos en paralelo. Los RDDs son la estructura de datos básica dentro del motor de procesamiento de datos de código abierto Apache Spark.
Spark se desarrolló para abordar las deficiencias en MapReduce, un modelo de programación para “dividir” una tarea de procesamiento de datos de gran tamaño en tareas paralelas más pequeñas.
MapReduce puede ser lento e ineficiente. Requiere replicación (mantener múltiples copias de datos en diferentes ubicaciones), serialización (coordinar el acceso a los recursos utilizados por más de un programa) y E/S intensa (entrada/salida de almacenamiento en disco).
Spark reduce específicamente el procesamiento innecesario. Mientras que MapReduce escribe datos intermedios en el disco, Spark utiliza RDDs para almacenar en caché y calcular datos en la memoria. El resultado es que el analytics engine de Spark puede procesar datos 10–100 veces más rápido que MapReduce.1
Apache Spark es un motor de procesamiento de datos rápido, de código abierto y a gran escala que se utiliza a menudo para aplicaciones de aprendizaje automático (ML) e inteligencia artificial (IA). Spark puede verse como una mejora en Hadoop, más específicamente, en el marco de procesamiento de datos nativo de Hadoop, MapReduce.
Spark escala distribuyendo flujos de trabajo de procesamiento de datos a través de grandes clústeres de computadoras, con soporte integrado para computación paralela en múltiples nodos y tolerancia a fallos.
Incluye interfaces de programación de aplicaciones (APIs) para lenguajes de programación habituales de ciencia de datos e ingeniería de datos, incluyendo Java™, Python (PySpark), Scala y R.
Spark utiliza RDDs para gestionar y procesar datos. Cada RDD se divide en particiones lógicas, que se pueden calcular en diferentes nodos de clúster simultáneamente. Los usuarios pueden realizar 2 tipos de operaciones RDD: transformaciones y acciones.
Spark realiza transformaciones y acciones en RDDs en la memoria—la clave de la velocidad de Spark. Spark también puede almacenar datos en la memoria o escribirlos en el disco para mayor persistencia.
Los Conjuntos de Datos Distribuidos Resilientes son resilientes y están distribuidos. Eso significa:
Los RDDs se denominan "resilientes" porque rastrean la información del linaje de datos para que los datos perdidos se puedan reconstruir si hay una falla, lo que hace que los RDDs sean altamente tolerantes a fallas.
Como ejemplo de esta resiliencia de datos, considere un núcleo ejecutor que se pierde durante el procesamiento de una partición de RDD. El controlador detectaría esa falla y esa partición se reasignaría a un núcleo ejecutor diferente.
Los RDDs se denominan "distribuidos" porque se dividen en grupos más pequeños de datos que se pueden distribuir a diferentes nodos informáticos y procesar simultáneamente.
Además de estas 2 características principales, RDD tiene otras características que contribuyen a su importancia y operaciones en Spark.
Muchos marcos de procesamiento de datos—y MapReduce en particular—deben realizar varias operaciones de lectura o escritura desde sistemas de almacenamiento externos, lo que ralentiza su rendimiento. RDD ayuda a Apache Spark a resolver este problema.
RDD reduce la E/S de disco mediante el uso de cálculos en memoria que almacenan resultados intermedios de operaciones iterativas en memoria de acceso aleatorio (RAM). El uso del cálculo y almacenamiento en memoria puede admitir un acceso más rápido y un procesamiento casi en tiempo real.
Los RDDs también pueden ayudar a acelerar el tiempo de capacitación para algoritmos de machine learning y el procesamiento de analytics de big data a gran escala. El uso del cálculo en memoria puede reducir el tiempo requerido para acceder al almacenamiento de datos.
En Spark, todas las transformaciones—operaciones aplicadas para crear un nuevo RDD—son "perezosas", es decir, los datos no se cargan ni calculan de inmediato.
En cambio, las transformaciones se rastrean en un gráfico acíclico dirigido (DAG) y se ejecutan solo cuando hay un llamado a la acción específico para un programa controlador.
El programa controlador dirige la función y las operaciones principales para el cálculo para clúster en trabajos de Spark, como la agregación, la recopilación, el recuento o el almacenamiento de resultados en un sistema de archivos.
Entre las docenas de acciones y transformaciones posibles se incluyen aggregateByKey, countByKey, flatMap, groupByKey, reduceByKey y sortbyKey.
La evaluación diferida ayuda a optimizar los pipelines de procesamiento de datos al eliminar el procesamiento innecesario y el recorte de cálculos innecesarios.
Spark hace la partición automática de los RDDs en varios nodos para poder procesar grandes volúmenes de datos que no cabrían en un solo nodo. Para ayudar a evitar daños, cada partición se almacena en un nodo en lugar de distribuirla entre varios nodos.
RDD permite a las organizaciones definir la ubicación de las particiones informáticas para que las tareas puedan ejecutarse cerca de los datos requeridos. Esta ubicación ayuda a aumentar la velocidad de procesamiento.
Además, se puede aumentar el número de ejecutores (equipos que realizan tareas asignadas por el controlador) en el clúster para mejorar el paralelismo en el sistema. El nivel de paralelismo en la salida depende de la cantidad de particiones en el RDD principal.
Los RDDs se pueden crear en particiones lógicas en un clúster para permitir operaciones paralelas en varios nodos. Los RDDs se pueden crear a partir de varias fuentes de almacenamiento estables, tales como Amazon Web Services (AWS) S3, Hadoop Distributed File System (HDFS), Apache HBase y Cassandra. También se pueden crear a través de lenguajes de programación como Scala y Python.
Spark RDD puede almacenar en caché conjuntos de datos en la memoria en todas las operaciones. Cada nodo puede almacenar las particiones que ha calculado en la memoria y reutilizarlas para acciones posteriores en el conjunto de datos o en los conjuntos de datos resultantes. Esta persistencia puede acelerar enormemente el procesamiento.
Spark también ofrece a los usuarios opciones de almacenamiento interactivas, dándoles control sobre cómo se almacenan los datos. Los datos se pueden almacenar en memoria, en disco o una mezcla de ambos.
Los RDDs son inmutables, lo que significa que no se pueden modificar después de su creación. La inmutabilidad ayuda a que los datos permanezcan estables a lo largo del tiempo a través de múltiples operaciones.
También hace que sea más fácil y seguro compartir datos entre múltiples procesos, y ayuda a proteger contra la corrupción que puede ser causada por actualizaciones simultáneas de diferentes hilos.
Si bien los RDDs son inmutables, los usuarios pueden crear nuevos RDDs aplicando transformaciones a los existentes, lo que permite actualizar los conjuntos de datos sin alterar los datos originales.
RDD puede procesar datos estructurados y no estructurados. Al procesar datos no estructurados, la información se puede extraer de múltiples tipos de bases de datos, flujos de medios o archivos de texto sin la necesidad de un esquema fijo o la creación de un DataFrame.
Dicho esto, los usuarios pueden crear DataFrames en Spark, lo que les permite beneficiarse de ciertas optimizaciones para mejorar el rendimiento.
Diseñe una estrategia de datos que elimine los silos de datos, reduzca la complejidad y mejore la calidad de los datos para ofrecer experiencias excepcionales a clientes y empleados.
watsonx.data le permite escalar los analytics y la IA con todos sus datos, sin importar donde residan, a través de un almacén de datos abierto, híbrido y gobernado.
Desbloquee el valor de los datos empresariales con IBM Consulting, y construya una organización impulsada por insights que ofrezca ventajas empresariales.
1 Apache Spark™, Apache Software Foundation, 20 de diciembre de 2024.