web-dev-qa-db-fra.com

Comment faire pour que requin / étincelle vide le cache?

lorsque j'exécute mes requêtes sur les requins, la mémoire est stockée dans la mémoire principale. C'est mon résultat de commande principal.


Mem: 74237344k total, 70080492k utilisé, 4156852k gratuit, 399544k buffers Swap: 4194288k total, 480k utilisé, 4193808k gratuit, 65965904k mis en cache


cela ne change pas même si je tue/arrête les processus requin, étincelle, hadoop. À l'heure actuelle, la seule façon de vider le cache est de redémarrer la machine.

quelqu'un at-il déjà fait face à ce problème? est-ce un problème de configuration ou un problème connu dans spark/shark?

22
venkat

Pour supprimer toutes les données mises en cache:

sqlContext.clearCache()

Source: https://spark.Apache.org/docs/2.0.1/api/Java/org/Apache/spark/sql/SQLContext.html

26

Utilisez-vous la méthode cache() pour conserver les RDD?

cache() appelle simplement persist(), donc pour supprimer le cache d'un RDD, appelez unpersist().

30
herman

C'est bizarre. Les questions posées n'ont rien à voir avec les réponses. Le cache OP affiché appartient au système d'exploitation et n'a rien à voir avec l'étincelle. Il s'agit d'une optimisation du système d'exploitation et nous ne devrions pas nous inquiéter de ce cache particulier.

Et spark cache est généralement en mémoire, mais ce sera dans la section RSS, pas la section cache du système d'exploitation.

3
Shawn

J'ai suivi celui-ci et cela a bien fonctionné pour moi ::

for ((k,v) <- sc.getPersistentRDDs) {
   v.unpersist()
}

sc.getPersistentRDDs est une carte qui stocke les détails des données mises en cache.

scala> sc.getPersistentRDDs

res48: scala.collection.Map [Int, org.Apache.spark.rdd.RDD [_]] = Map ()

2
Sankar