Qué es RDD en spark


La definición dice:

RDD es una colección distribuida inmutable de objetos

No entiendo muy bien lo que significa. ¿Es como los datos (objetos particionados) almacenados en el disco duro Si es así, entonces cómo es que los RDD pueden tener clases definidas por el usuario (como java, scala o python)

Desde este enlace: https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html menciona:

Los usuarios crean RDDs de dos maneras: por cargar un conjunto de datos externo, o distribuir una colección de objetos (por ejemplo, una lista o conjunto) en su programa de conductor

Estoy realmente confundido entendiendo RDD en general y en relación con spark y hadoop.

Puede alguien por favor ayudar.

Author: kittu, 2015-12-23

8 answers

Un RDD es, esencialmente, la representación Spark de un conjunto de datos, repartidos en varias máquinas, con API que le permiten actuar sobre él. Un RDD podría provenir de cualquier fuente de datos, por ejemplo, archivos de texto, una base de datos a través de JDBC, etc.

La definición formal es:

Los RDD son estructuras de datos paralelas tolerantes a fallos que permiten a los usuarios persistir explícitamente los resultados intermedios en la memoria, controlar su particionado para optimizar la colocación de los datos, y manipularlos mediante un rico conjunto de operador.

Si desea obtener todos los detalles sobre lo que es un RDD, lea uno de los documentos académicos principales de Spark, Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing

 28
Author: Ewan Leith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-04 14:44:34

RDD es una referencia lógica de un dataset que está particionado en muchas máquinas servidor en el clúster. Los RDD son inmutables y se recuperan automáticamente en caso de fallo.

dataset podrían ser los datos cargados externamente por el usuario. Podría ser un archivo json, un archivo csv o un archivo de texto sin una estructura de datos específica.

introduzca la descripción de la imagen aquí

ACTUALIZAR: Aquí hay un artículo que describe el funcionamiento interno de RDD:

Espero que esto ayude.

 10
Author: tharindu_DG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-23 12:06:02

Formalmente, un RDD es una colección de registros particionados de solo lectura. Los RDD solo se pueden crear a través de operaciones deterministas en (1) datos en almacenamiento estable o (2) otros RDD.

Los RDD tienen las siguientes propiedades -

  1. Inmutabilidad y partición: RDD compuesto por colección de registros que están particionados. La partición es unidad básica de paralelismo en un RDD, y cada partición es una división lógica de datos que es inmutable y creada a través de algunas transformaciones en particiones existentes.La inmutabilidad ayuda a lograr consistencia en los cálculos.

    Los usuarios pueden definir sus propios criterios de partición basados en claves en las que desean unir varios conjuntos de datos si es necesario.

  2. Operaciones de grano grueso: Las operaciones de grano grueso son operaciones que se aplican a todos los elementos de los conjuntos de datos. Por ejemplo, un mapa, un filtro o una operación groupBy que se realizará en todos los elementos de una partición de RDD.

  3. Tolerancia A Fallos: Dado que los RDD se crean sobre un conjunto de transformaciones , registra esas transformaciones en lugar de datos reales.Gráfico de estas transformaciones para producir un RDD se llama como Gráfico de linaje.

Por ejemplo -

firstRDD=sc.textFile("hdfs://...")

secondRDD=firstRDD.filter(someFunction);

thirdRDD = secondRDD.map(someFunction);

result = thirdRDD.count()

En caso de que perdamos alguna partición de RDD, podemos volver a reproducir la transformación en esa partición en linaje para lograr el mismo cálculo, en lugar de hacer replicación de datos a través de múltiples nodo.Esta característica es el mayor beneficio de RDD, ya que ahorra muchos esfuerzos en la gestión y replicación de datos y, por lo tanto, logra cálculos más rápidos.

  1. Evaluaciones perezosas: Spark calcula los RDD perezosamente la primera vez que se usan en una acción, para que pueda canalizar transformaciones. Por lo tanto, en el ejemplo anterior, RDD será evaluado solo cuando se invoque la acción count ().

  2. Persistencia: Los usuarios pueden indicar qué RDD van a reutilizar y elija una estrategia de almacenamiento para ellos (por ejemplo, almacenamiento en memoria o en disco, etc.).)

Estas propiedades de los RDD los hacen útiles para cálculos rápidos.

 7
Author: Mahesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-04 08:00:59

Resilient Distributed Dataset (RDD) es la forma en que Spark representa los datos. Los datos pueden provenir de varias fuentes :

  • Archivo de texto
  • Archivo CSV
  • Archivo JSON
  • Base de datos (a través del controlador JBDC)

RDD en relación con Spark

Spark es simplemente una implementación de RDD.

RDD en relación con Hadoop

El poder de Hadoop reside en el hecho de que permite a los usuarios escribir cálculos paralelos sin tener que preocúpese por la distribución del trabajo y la tolerancia a fallos. Sin embargo, Hadoop es ineficiente para las aplicaciones que reutilizan resultados intermedios. Por ejemplo, los algoritmos iterativos de aprendizaje automático, como PageRank, clustering de K-means y regresión logística, reutilizan los resultados intermedios.

RDD permite almacenar resultados intermedios dentro de la RAM. Hadoop tendría que escribirlo en un sistema de almacenamiento estable externo, que genera E/S de disco y serialización. Con RDD, Spark es hasta 20 VECES más rápido que Hadoop para aplicaciones iterativas.

Detalles acerca de Spark{[29] - Mostrar título original]}

Transformaciones de grano grueso

Las transformaciones aplicadas a un RDD son de grano grueso. Esto significa que las operaciones en un RDD se aplican a todo el conjunto de datos, no a sus elementos individuales. Por lo tanto, las operaciones como map, filter, group, reduce están permitidas, pero las operaciones como set(i) y get(i) no lo están.

El inverso de grano grueso es grano fino. Un grano fino el sistema de almacenamiento sería una base de datos.

Tolerante a fallos

Los RDD son tolerantes a fallos, que es una propiedad que permite al sistema seguir funcionando correctamente en caso de fallo de uno de sus componentes.

La tolerancia a fallos de Spark está fuertemente vinculada a su naturaleza de grano grueso. La única manera de implementar la tolerancia a errores en un sistema de almacenamiento de grano fino es replicar sus datos o registrar actualizaciones en las máquinas. Sin embargo, en un sistema de grano grueso como Spark, solo se registran las transformaciones. Si se pierde una partición de un RDD, el RDD tiene suficiente información para volver a calcularlo rápidamente.

Almacenamiento de datos

El RDD está "distribuido" (separado) en particiones. Cada partición puede estar presente en la memoria o en el disco de una máquina. Cuando Spark quiere iniciar una tarea en una partición, la envía a la máquina que contiene la partición. Esto se conoce como "programación localmente consciente".

Fuentes : Grandes artículos de investigación sobre Spark : http://spark.apache.org/research.html

Incluya el artículo sugerido por Ewan Leith.

 6
Author: pgirard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-14 20:15:56

RDD = Conjunto de Datos Distribuido Resiliente

Resistente (significado del diccionario) = (de una sustancia u objeto) capaz de retroceder o volver a tomar forma después de doblarse, estirarse o comprimirse

RDD se define como (de LearningSpark - OREILLY): La capacidad de volver a calcular siempre un RDD es en realidad la razón por la que los RDD se llaman "resilientes"."Cuando una máquina que contiene datos RDD falla, Spark utiliza esta capacidad para volver a calcular las particiones que faltan, transparente para el usuario.

Esto significa los' datos ' seguramente están disponibles en todo momento. Además, Spark puede ejecutarse sin Hadoop y, por lo tanto, los datos NO se replican. Una de las mejores características de Hadoop2.0 es 'Alta disponibilidad' con la ayuda de Modo pasivo de Espera Namenode. Lo mismo se consigue con RDD en Spark.

Un RDD (Datos) dado puede abarcar varios nodos en el clúster de Spark (como en el clúster basado en Hadoop).

Si algún nodo falla, Spark puede volver a calcular el RDD y cargar los datos en algún otro nodo, y los datos siempre están disponible. Spark gira en torno al concepto de conjunto de datos distribuido resiliente (RDD), que es una colección tolerante a fallos de elementos que se pueden operar en paralelo (http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds)

 5
Author: SPR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-08 00:20:59

Para comparar RDD con la colección scala, a continuación se muestran algunas diferencias

  1. Lo mismo pero se ejecuta en un clúster
  2. Perezoso en la naturaleza donde las colecciones de scala son estrictas
  3. RDD es siempre Inmutable es decir, no se puede cambiar el estado de los datos en la colección
  4. Los RDD son auto-recuperados, es decir, tolerantes a fallos
 2
Author: Saketh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-23 11:08:28

RDD (Resilient Distributed Datasets) son una abstracción para representar datos. Formalmente, son una colección de registros particionados de solo lectura que proporciona una API conveniente.

RDD proporciona una solución eficaz para procesar grandes conjuntos de datos en marcos de computación en clúster como MapReduce al abordar algunos problemas clave:

  • los datos se guardan en la memoria para reducir las E / S del disco; esto es particularmente relevante para los cálculos iterativos -- no tener que conservar datos intermedios en disco
  • la tolerancia a fallos (resiliencia) no se obtiene replicando datos, sino realizando un seguimiento de todas las transformaciones aplicadas al conjunto de datos inicial (el linaje ). De esta manera, en caso de fallo, los datos perdidos siempre se pueden volver a calcular desde su linaje y evitar la replicación de datos reduce nuevamente la sobrecarga de almacenamiento
  • evaluación perezosa, es decir, los cálculos se llevan a cabo primero cuando se necesitan

Los RDD tienen dos limitaciones principales:

  • son inmutables (solo lectura)
  • solo permiten transformaciones de grano grueso (es decir, operaciones que se aplican a todo el conjunto de datos)

Una buena ventaja conceptual de los RDD es que empaquetan datos y código, lo que facilita la reutilización de canalizaciones de datos.

Fuentes: Conjuntos de datos Distribuidos Resilientes: Una Abstracción Tolerante a Fallos para la Computación en Clúster en Memoria, Una Arquitectura para Rápida y General Procesamiento de Datos en Grandes Grupos

 0
Author: user2314737,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-27 21:36:36

RDD es una forma de representar datos en spark.La fuente de datos puede ser JSON, CSV textfile o alguna otra fuente. RDD es tolerante a fallas, lo que significa que almacena datos en múltiples ubicaciones(es decir, los datos se almacenan en forma distribuida), por lo que si un nodo falla, los datos se pueden recuperar. En RDD los datos están disponibles en todo momento. Sin embargo, los RDD son lentos y difíciles de codificar, por lo tanto, obsoletos. Ha sido reemplazado por el concepto de DataFrame y Dataset.

 0
Author: saad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-13 11:02:19