Pregunta Comprender el almacenamiento en caché, persistiendo en Spark


¿Alguien puede corregir mi comprensión sobre la persistencia de Spark?

Si hemos realizado una caché () en un RDD, su valor se almacenará en caché solo en aquellos nodos en los que inicialmente se computó el RDD. Es decir, si hay un clúster de 100 nodos, y el RDD se calcula en las particiones del primer y segundo nodos. Si almacenamos en caché este RDD, entonces Spark guardará su valor en caché solo en el primer o segundo nodo de trabajo. Entonces, cuando esta aplicación Spark intenta usar este RDD en etapas posteriores, el controlador Spark debe obtener el valor de los nodos primero / segundo.

¿Estoy en lo correcto?

(O)

¿Es algo que el valor de RDD persiste en la memoria del controlador y no en los nodos?


13
2017-08-28 23:33


origen


Respuestas:


Cambia esto:

entonces Spark va a almacenar su valor en caché solo en primer o segundo nodo trabajador.

a esto:

entonces Spark va a almacenar su valor en caché solo en primer y segundo nodo trabajador.

y... ¡correcto!

Spark intenta minimizar el uso de la memoria (¡y nos encanta!), Por lo que no generará cargas de memoria innecesarias, ya que evalúa cada afirmación perezosamente, es decir, no hará ningún trabajo real en ningún transformación, esperará por un acción para que suceda, lo que no deja opción a Spark, que hacer el trabajo real (leer el archivo, comunicar los datos a la red, hacer el cálculo, recopilar el resultado de vuelta al controlador, por ejemplo ...).

Verá, no queremos almacenar todo en caché, a menos que podamos hacerlo (es decir, que la capacidad de memoria lo permite (sí, podemos pedir más memoria en los ejecutores y / o el controlador, pero a veces nuestro clúster solo no tiene los recursos, realmente comunes cuando manejamos Big Data) y realmente tiene sentido, es decir, que el RDD almacenado en caché se utilizará una y otra vez (por lo que el almacenamiento en caché acelerará la ejecución de nuestro trabajo).

Es por eso que quieres unpersist() tu RDD, cuando ya no lo necesites ...! :)

Verifique esta foto, es de uno de mis trabajos, donde había solicitado 100 ejecutores, sin embargo, la pestaña Ejecutores mostraba 101, es decir, 100 esclavos / trabajadores y un maestro / controlador:

enter image description here


9
2017-08-29 06:01



RDD.cache es una operación perezosa. no hace nada hasta que a menos que llame a una acción como contar. Una vez que llame a la acción, la operación usará el caché. Simplemente tomará los datos del caché y realizará la operación.

RDD.cache: persiste el RDD con nivel de almacenamiento predeterminado (solo memoria).                API Spark RDD

2. ¿Es algo que el valor de RDD persiste en la memoria del controlador y no en los nodos?

El RDD también puede persistir en el disco y la memoria. Haga clic en el enlace al documento de Spark para todas las opciones Persistencia de Spark Rdd


1
2017-08-29 05:58



Aquí hay una respuesta excelente sobre el almacenamiento en caché

(Por qué) necesitamos llamar al caché o persistir en un RDD

Básicamente, el almacenamiento en caché almacena el RDD en la memoria / disco (en función del nivel de persistencia establecido) de ese nodo, de modo que cuando este RDD se invoca nuevamente, no necesita recalcular su linaje (linaje - Conjunto de transformaciones anteriores ejecutadas para estar en el estado actual).


0
2017-08-29 00:17