scala - pc2100 - Qué es el DDR en chispa
pc2100 ddr (8)
El RDD es una forma de representar datos en chispa. La fuente de datos puede ser JSON, archivo de texto CSV o alguna otra fuente. El 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 pueden recuperarse. 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.
La definición dice:
RDD es una colección distribuida inmutable de objetos
No entiendo muy bien lo que significa. ¿Es como datos (objetos particionados) almacenados en el disco duro? 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 RDD de dos maneras: mediante la carga de un conjunto de datos externo, o mediante la distribución de una colección de objetos (por ejemplo, una lista o un conjunto) en su programa de controlador
Estoy realmente confundido al entender el DDR en general y en relación con chispa y hadoop.
Puede ayudarme alguien, por favor.
Formalmente, un RDD es una colección de registros con solo lectura y particionada. Los RDD solo se pueden crear a través de operaciones determinísticas en (1) datos en almacenamiento estable o (2) otros RDD.
Los RDD tienen las siguientes propiedades:
Inmutabilidad y particionamiento: RDDs compuestos por la colección de registros que están particionados. La partición es la unidad básica de paralelismo en un RDD, y cada partición es una división lógica de datos que es inmutable y se crea a través de algunas transformaciones en las particiones existentes. La capacidad de intercambio ayuda a lograr coherencia en los cálculos.
Los usuarios pueden definir sus propios criterios de partición basados en claves en las que desean unir múltiples conjuntos de datos si es necesario.
Operaciones de grano grueso: las operaciones de grano grueso son operaciones que se aplican a todos los elementos en los conjuntos de datos. Por ejemplo, un mapa, filtro o grupo por operación que se realizará en todos los elementos en una partición de RDD.
Tolerancia a fallas: como los RDD se crean a través de un conjunto de transformaciones, registra esas transformaciones, en lugar de datos reales. El gráfico de estas transformaciones para producir un RDD se denomina 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 reproducir la transformación en esa partición en linaje para lograr el mismo cálculo, en lugar de replicar datos en múltiples nodos. Esta característica es el mayor beneficio del RDD, ya que ahorra muchos esfuerzos. en la administración y replicación de datos, y así se logran cómputos más rápidos.
Evaluaciones diferidas : Spark calcula los RDD de forma perezosa la primera vez que se utilizan en una acción, de modo que puede canalizar las transformaciones. Por lo tanto, en el ejemplo anterior, el RDD se evaluará solo cuando se invoque la acción count ().
Persistencia: los usuarios pueden indicar qué RDD reutilizarán y elegir 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.
Para comparar el RDD con la colección scala, a continuación hay algunas diferencias
- Lo mismo, pero se ejecuta en un clúster
- Lazy en la naturaleza donde las colecciones scala son estrictas
- El RDD siempre es inmutable, es decir, no puede cambiar el estado de los datos en la colección
- RDD son auto recuperados, es decir, tolerantes a fallas
RDD = Dataset Distribuido Resiliente
Resiliente (significado del diccionario) = (de una sustancia u objeto) capaz de retroceder o volver a su forma después de doblarse, estirarse o comprimirse
RDD se define como (desde LearningSpark - OREILLY): la capacidad de recalcular siempre un RDD es la razón por la cual los RDD se denominan "resistentes". Cuando una máquina que tiene datos RDD falla, Spark usa esta capacidad para recalcular las particiones faltantes, transparentes para el usuario .
Esto significa que ''datos'' seguramente está disponible 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 Passive Standby Namenode. Lo mismo se logra mediante RDD en Spark.
Un RDD (datos) determinado puede abarcar varios nodos en el clúster Spark (como en el clúster basado en Hadoop).
Si algún nodo falla, Spark puede volver a calcular el RDD y carga los datos en algún otro nodo, y los datos están siempre disponibles. Spark gira en torno al concepto de un conjunto de datos distribuido resistente (RDD), que es una colección tolerante a fallas de elementos que se pueden operar en paralelo ( http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds )
Un RDD es, esencialmente, la representación Spark de un conjunto de datos, distribuidos en varias máquinas, con API para que pueda 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 los errores, que permiten a los usuarios persistir explícitamente en la memoria los resultados intermedios, controlar su partición para optimizar la ubicación de los datos y manipularlos utilizando un amplio conjunto de operadores.
Si desea conocer todos los detalles sobre qué es un RDD, lea uno de los documentos académicos principales de Spark, Conjuntos de datos distribuidos resistentes: Una abstracción tolerante a fallas para la computación en clúster en memoria.
El conjunto de datos distribuido resistente (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 radica en el hecho de que permite a los usuarios escribir cálculos paralelos sin tener que preocuparse por la distribución del trabajo y la tolerancia a fallas. Sin embargo, Hadoop es ineficiente para las aplicaciones que reutilizan resultados intermedios. Por ejemplo, los algoritmos iterativos de aprendizaje automático, tales como PageRank, K-means clustering 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.
Otras implementaciones detalles sobre Spark
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 en sus elementos individuales. Por lo tanto, las operaciones como map, filter, group, reduce están permitidas, pero operaciones como set (i) y get (i) no lo son.
El inverso de grano grueso es de grano fino. Un sistema de almacenamiento de grano fino sería una base de datos.
Tolerante a fallos
Los RDD son tolerantes a fallas, que es una propiedad que permite que el sistema continúe funcionando correctamente en caso de falla de uno de sus componentes.
La tolerancia a fallas de Spark está fuertemente relacionada con su naturaleza de grano grueso. La única forma de implementar la tolerancia a fallas en un sistema de almacenamiento de grano fino es replicar sus datos o las actualizaciones de registro en todas 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 lanzar una tarea en una partición, la envía a la máquina que contiene la partición. Esto se conoce como "programación con conocimiento local".
Fuentes: Grandes trabajos de investigación sobre Spark: http://spark.apache.org/research.html
Incluye el documento sugerido por Ewan Leith.
RDD ( R areilient D istributed D atasets) son una abstracción para representar datos. Formalmente, son una colección de registros divididos de solo lectura que proporciona una API conveniente.
RDD proporciona una solución de rendimiento para procesar conjuntos de datos grandes en marcos de cómputo de clúster, como MapReduce, abordando algunos problemas clave:
- los datos se guardan en la memoria para reducir la E / S del disco; esto es particularmente relevante para cálculos iterativos: no tener que conservar los datos intermedios en el disco
- la tolerancia a fallas (resiliencia) se obtiene no mediante la replicación de datos sino mediante el seguimiento de todas las transformaciones aplicadas al conjunto de datos inicial (el linaje ). De esta forma, en caso de falla, los datos perdidos siempre se pueden volver a calcular a partir de su linaje y evitar la duplicación de datos reduce la sobrecarga de almacenamiento
- evaluación diferida, 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 combinan datos y códigos, lo que facilita la reutilización de las canalizaciones de datos.
Fuentes: conjuntos de datos distribuidos resistentes: una abstracción tolerante a errores para el cómputo en clúster en memoria , una arquitectura para el procesamiento rápido y general de datos en clústeres grandes
RDD es una referencia lógica de un dataset
de dataset
que está particionado en muchas máquinas servidor en el clúster. Los RDD s son inmutables y se auto recuperan en caso de falla.
dataset
podría ser la información cargada 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.
ACTUALIZACIÓN : Here hay un artículo que describe las partes internas del RDD:
Espero que esto ayude.