Spark Core-RDD
RDD es el núcleo de Spark y la base arquitectónica de todo Spark.
Características de RDD:
Cinco características principales de RDD:
Hay dos formas de crear RDD:
La operación de conversión se refiere a Realice cálculos en la instancia RDD original y luego cree una nueva instancia RDD.
Todas las acciones de transformación en RDD son inertes. Al realizar operaciones de transformación en RDD, los resultados no se calcularán directamente, pero se recordarán las acciones de transformación aplicadas al conjunto de datos básicos. Estas transformaciones no se ejecutarán realmente hasta que se realicen las acciones. La ventaja de este diseño es un funcionamiento más eficiente.
Las operaciones de acción se refieren a operaciones que devuelven resultados al controlador o escriben resultados en un sistema externo.
Cuando Spark llama a una operación de acción en un RDD, desencadenará una reacción en cadena en Spark. Spark intentará crear un RDD cuando se llame a la operación como autor de la llamada. Si este RDD se crea a partir de un archivo, Spark leerá el archivo en la memoria del nodo trabajador. Si este RDD se convierte de otro RDD, Spark intentará crear su RDD principal. Este proceso continúa hasta que Spark encuentra el RDD raíz. Luego, Spark realizará estos cálculos de transformación necesarios para generar el RDD. Finalmente, se completa la operación de acción y el resultado se devuelve al controlador o se escribe en la memoria externa.
Una de las razones por las que Spark es tan rápido es que permite conservar un conjunto de datos en la memoria a través de diferentes operaciones. Cuando el RDD persiste, cada nodo guardará los resultados de la división calculados en la memoria y los reutilizará en otras acciones en ese conjunto de datos. Esto permite acciones de seguimiento más rápidas. El almacenamiento en caché es clave para los algoritmos iterativos y las consultas interactivas rápidas de Spark. Por lo tanto, durante el proceso de desarrollo, debemos almacenar en caché los RDD de uso frecuente para mejorar la eficiencia del programa.
Métodos de almacenamiento en caché de RDD
La clase RDD proporciona dos métodos de almacenamiento en caché:
El método de almacenamiento en caché en realidad almacena el RDD en la memoria de los subprocesos de trabajo en el clúster.
La persistencia es un método general de almacenamiento en caché. Puede almacenar RDD en la memoria, en el disco duro o en ambos.
Tolerancia a fallos de caché
Es posible que se pierda el caché (por ejemplo, cuando se apaga la máquina) o que los datos almacenados en la memoria se eliminen debido a una memoria insuficiente. El mecanismo tolerante a fallos de la caché RDD garantiza que los cálculos se puedan realizar correctamente incluso si se pierde la caché. Mediante una serie de transformaciones basadas en RDD, se volverán a calcular los datos faltantes. Debido a que cada partición del RDD es relativamente independiente, al volver a calcular solo es necesario calcular las particiones que faltan y no es necesario volver a calcular todas las particiones. Por lo tanto, cuando falla el nodo que almacena en caché el RDD, Spark recrea automáticamente las particiones almacenadas en el nodo fallido en otro nodo.
Una vez completado el primer cálculo, la caché RDD puede guardar los resultados del cálculo en la memoria, el sistema de archivos local o los taquiones. A través del almacenamiento en caché, Spark evita cálculos repetidos en RDD, lo que puede mejorar en gran medida la velocidad de cálculo. Sin embargo, si se pierde el caché, es necesario volver a calcularlo. Si el cálculo es particularmente complejo o requiere mucho tiempo, el impacto de los errores de caché en todo el trabajo no es despreciable. Para evitar la sobrecarga causada por la pérdida de caché y el recálculo, Spark introduce un mecanismo de punto de control.
El almacenamiento en caché consiste en escribir directamente los resultados del cálculo en diferentes medios a través de niveles de almacenamiento definidos por el usuario una vez completado el cálculo. El punto de control es diferente. Restablece un trabajo para calcular una vez completado el cálculo. Por lo tanto, para evitar cálculos dobles, se recomienda almacenar en caché el RDD primero para que pueda completarse rápidamente durante las operaciones de punto de control.
Spark animará las dependencias entre RDD en función de las transformaciones y acciones de los RDD en la lógica de cálculo enviada por el usuario, y esta cadena de cálculo generará un DAG lógico.
Las dependencias entre rdd incluyen:
Las dependencias en Spark se reflejan principalmente de dos formas: