web-dev-qa-db-fra.com

Comprendre la mise en cache, persister dans Spark

Quelqu'un peut-il s'il vous plaît corriger ma compréhension sur la persistance de Spark.

Si nous avons effectué une cache () sur un RDD, sa valeur est mise en cache uniquement sur les nœuds pour lesquels RDD a été calculé à l'origine ..... Signification, s'il existe un cluster de 100 nœuds, et que RDD est calculé dans les partitions de premier et second nœuds. Si nous avons mis en cache ce RDD, Spark mettra cette valeur en cache uniquement dans les premier ou deuxième nœuds de travail . Ainsi, lorsque cette application Spark essaie d'utiliser ce RDD à un stade ultérieur, le pilote Spark doit extraire la valeur du premier/deuxième nœud.

Ai-je raison?

(OU)

Est-ce que c'est quelque chose que la valeur RDD est persisté dans la mémoire du pilote et pas sur les nœuds?

14
Ramesh

Change ça:

alors Spark mettra sa valeur en cache uniquement dans les premiers ou deuxièmes nœuds de travail.

pour ça:

alors Spark ne mettra sa valeur en cache que dans les _ et deuxièmes nœuds de travail.

et ...Oui correct!

Spark essaie de minimiser l’utilisation de la mémoire (et nous l’adorons pour cela!), Afin de ne pas charger de mémoire inutile, puisqu’il évalue chaque déclaration lazily, c’est-à-dire qu’il ne fait aucun travail réel sur transformation, il attendra qu'une action se produise, ce qui ne laissera à Spark le choix que de faire le travail réel (lire le fichier, communiquer les données au réseau, faire la calcul, recueillez le résultat auprès du pilote, par exemple ..).

Vous voyez, nous ne voulons pas tout mettre en cache, sauf si nous le pouvons vraiment (c’est-à-dire que la capacité de mémoire le permet (oui, nous pouvons demander plus de mémoire dans les exécuteurs ou/et le pilote, mais parfois notre cluster n'a pas les ressources, ce qui est très courant lorsque nous traitons big data) et cela a vraiment un sens, c'est-à-dire que le RDD mis en cache va être utilisé encore et encore (sa mise en cache accélérera donc l'exécution de notre emploi).

C'est pourquoi vous voulez unpersist() votre RDD, quand vous n'en avez plus besoin ...! :)

Cochez cette image pour l’un de mes travaux, où j’avais demandé à 100 exécuteurs. Cependant, l’onglet des exécuteurs affichait 101, c’est-à-dire 100 esclaves/ouvriers et un maître/conducteur:

 enter image description here

10
gsamaras

RDD.cache est une opération lazy. il ne fait rien jusqu'à ce que vous appeliez une action comme count. Une fois que vous appelez l'action, l'opération utilisera le cache. Il va juste prendre les données du cache et faire l'opération. 

RDD.cache- Conserve le RDD avec le niveau de stockage par défaut (mémoire uniquement). API Spark RDD

2.Est-ce que la valeur RDD est conservée dans la mémoire du pilote et non sur les nœuds?

Le RDD peut également être conservé sur le disque et dans la mémoire. Cliquez sur le lien vers le document Spark pour toutes les options Spark Rdd Persist

1
Indrajit Swain

Voici une excellente réponse sur la mise en cache 

(Pourquoi) avons-nous besoin d'appeler le cache ou de rester sur un RDD

Fondamentalement, la mise en cache stocke le RDD dans la mémoire/le disque (en fonction du jeu de niveaux de persistance) de ce nœud, de sorte que, lorsque ce RDD est appelé à nouveau, il n’est pas nécessaire de recalculer sa lignée état actuel).

0
Krishna Kalyan