Out of memory

Comment économiser de la mémoire RAM (et du temps) ?

Collecter le moins possible 🤏

  • L’export direct d’un spark data frame en parquet sur HDFS est une meilleure alternative : tu peux ensuite charger la table parquet en data frame R si tu souhaites la traiter en mémoire vive.

  • Contrairement au collect(), quelle que soit la taille de la table, exporter sous HDFS ne renverra jamais d’erreur, tandis que le collect()ne fonctionne pas pour les tables volumineuses.

  • Cet export direct n’est pas fonctionnel en spark local : encore une raison de passer sur le cluster Spark !

  • Si tu souhaites voir ta table, tu peux collecter les premières lignes de celle-ci en combinant les fonctions head()et collect().

Eviter les fonctions arrow ⚠️

  • Si tu as utilisé des fonctions telles que compute() dans ton programme, elles peuvent être à l’origine d’une erreur Out of memory : ces commandes ne sont pas bien adaptées à Spark et les résultats temporaires stockés en mémoire vive ne sont pas visibles dans l’espace dédié sur SparkUI onglet Storage, il semblerait que ces résultats temporaires soient stockés “au mauvais endroit” et occupent de l’espace sans que l’utilisateur y ait accès.

  • Privilégier les fonctions tbl_cache() avec sdf_register()pour forcer l’exécution du programme.

Laisser Spark travailler pour nous 💻

  • Forcer l’exécution du programme le plus tard possible pour permettre à Spark d’optimiser tout le programme et d’utiiliser les ressources de la manière la plus parcimonieuse possible.

  • Tester son programme sur une toute petite partie des tables, étape par étape, en forçant l’exécution (appel d’une action telle que print() ou collect() ) à chaque étape pour la phase de débuggage, puis supprimer toutes les actions intermédiaires non nécessaires du programme pour que Spark optimise tout le programme.

Si tout ceci ne fonctionne pas : passer à la configuration traitement très lourd

Par souci de parcimonie et pour faciliter le travail de nos collègues sur des ressources partagées, cette option doit rester l’ultime recours pour éviter l’erreur Out of memory 🤝