Spark: Différence entre le Shuffle d'Écriture, de lecture Aléatoire de déversement (de mémoire), Shuffle déversement (disque)?

J'ai le texte suivant étincelle de l'emploi, en essayant de garder tout en mémoire:

val myOutRDD = myInRDD.flatMap { fp =>
  val tuple2List: ListBuffer[(String, myClass)] = ListBuffer()
        :

  tuple2List
}.persist(StorageLevel.MEMORY_ONLY).reduceByKey { (p1, p2) =>
   myMergeFunction(p1,p2)
}.persist(StorageLevel.MEMORY_ONLY)

Cependant, lorsque j'ai regardé dans le tracker d'emploi, j'ai encore beaucoup de lecture Aléatoire d'Écriture et de lecture Aléatoire de déversement sur le disque ...

Total task time across all tasks: 49.1 h
Input Size /Records: 21.6 GB /102123058
Shuffle write: 532.9 GB /182440290
Shuffle spill (memory): 370.7 GB
Shuffle spill (disk): 15.4 GB

Puis le travail a échoué parce que "no space left on device" ... je me demande pour le 532.9 GO Shuffle écrire ici, est-il écrit sur le disque ou la mémoire?

Aussi, pourquoi il y a encore de 15,4 G data déversement sur le disque alors que j'ai demander spécifiquement pour les garder dans la mémoire?

Merci!

OriginalL'auteur Edamame | 2015-08-25