Je suis débutant pour Spark et j'exécute mon application pour lire les données de 14 Ko du texte déposé, faire des transformations et des actions (collecter, collectAsMap) et enregistrer les données dans la base de données
Je l'exécute localement dans mon macbook avec une mémoire 16G, avec 8 cœurs logiques.
Le tas Java Max est défini sur 12G.
Voici la commande que j'utilise pour exécuter l'application.
bin/spark-submit --class com.myapp.application --master local [*] --executor-memory 2G --driver-memory 4G /jars/application.jar
Je reçois l'avertissement suivant
13-01-2017 16: 57: 31.579 [Lancer la tâche de l'exécuteur ouvrier-8hread] WARN org.Apache.spark.storage.MemoryStore - Pas assez d'espace pour mettre en cache rdd_57_0 en mémoire! (calculé 26,4 Mo jusqu'à présent)
Quelqu'un peut-il me guider sur ce qui ne va pas ici et comment puis-je améliorer les performances? Aussi comment optimiser le déversement suffle? Voici une vue du déversement qui se produit dans mon système local
L'exécution d'exécuteurs avec trop de mémoire entraîne souvent des retards excessifs de collecte des ordures. Ce n'est donc pas une bonne idée d'attribuer plus de mémoire. Étant donné que vous n'avez que 14 Ko de données, 2 Go de mémoire d'exécuteurs et 4 Go de mémoire de pilote sont plus que suffisants. Il est inutile d'affecter autant de mémoire. Vous pouvez exécuter ce travail avec même 100 Mo de mémoire et les performances seront meilleures que 2 Go.
La mémoire du pilote est plus utile lorsque vous exécutez l'application, en mode cluster de fils, car le maître de l'application exécute le pilote. Ici, vous exécutez votre application en mode local driver-memory
n'est pas nécessaire. Vous pouvez supprimer cette configuration de votre travail.
Dans votre candidature, vous avez attribué
Java Max heap is set at: 12G.
executor-memory: 2G
driver-memory: 4G
Allocation totale de mémoire = 16 Go et votre macbook ayant seulement 16 Go de mémoire. Ici, vous avez alloué le total de votre mémoire RAM) à votre application spark.
Ce n'est pas bien. Le système d'exploitation lui-même consomme environ 1 Go de mémoire et vous pourriez avoir à exécuter d'autres applications qui consomment également la mémoire RAM. Donc ici, vous allouez réellement plus de mémoire que vous n'en avez. Et c'est la cause première de votre l'application génère une erreur Not enough space to cache the RDD
executor-memory 1G
ou moinsdriver-memory
à partir de votre configuration.Soumettez votre travail. Il se déroulera sans problème.
Si vous êtes très désireux de connaître les techniques de gestion de la mémoire spark $), consultez cet article utile.