5 techniques d'optimisation Spark que tout scientifique de données devrait connaître

Publié: 2020-06-12

Qu'il s'agisse d'une petite startup ou d'une grande entreprise, les données sont partout. Ces données sont collectées à partir de diverses sources, telles que les journaux des clients, les factures de bureau, les feuilles de coûts et les bases de données des employés. Les entreprises collectent et analysent ces blocs de données pour déterminer les modèles et les tendances. Ces modèles les aident à prendre des décisions importantes pour l'amélioration de l'entreprise.

Mais cette analyse de données et cette analyse de chiffres ne sont pas possibles uniquement via des feuilles Excel. C'est là qu'interviennent les technologies logicielles de traitement de données. L'un des frameworks de traitement de données les plus rapides et les plus utilisés est Apache Spark. Des techniques d'optimisation Spark sont utilisées pour ajuster ses performances afin d'en tirer le meilleur parti.

Nous allons découvrir les techniques dans un instant. Enveloppons nos têtes autour des bases de ce cadre logiciel.

Table des matières

Qu'est-ce qu'Apache Spark ?

Apache Spark est un framework informatique en cluster open source de renommée mondiale qui est utilisé pour traiter d'énormes ensembles de données dans les entreprises. Le traitement de ces énormes ensembles de données et leur distribution sur plusieurs systèmes est facile avec Apache Spark. Il propose des API simples qui facilitent la vie des programmeurs et des développeurs.

Spark fournit des liaisons natives pour les langages de programmation, tels que Python, R, Scala et Java. Il prend en charge l'apprentissage automatique, le traitement des graphes et les bases de données SQL . En raison de ces avantages incroyables, Spark est utilisé dans les banques, les entreprises technologiques, les organisations financières, les services de télécommunications et les agences gouvernementales. Pour en savoir plus sur apache spark, consultez nos cours de science des données dispensés par des universités reconnues.

Architecture d'Apache Spark

L'architecture d'exécution d'Apache Spark comprend les composants suivants :

Pilote Spark ou processus maître

Cela convertit les programmes en tâches, puis les planifie pour les exécuteurs (processus esclaves). Le planificateur de tâches distribue ces tâches aux exécuteurs.

Gestionnaire de cluster

Le gestionnaire de cluster Spark est responsable du lancement des exécuteurs et des pilotes. Il planifie et alloue des ressources sur plusieurs machines hôtes pour un cluster.

Exécuteurs

Les exécuteurs, également appelés processus esclaves, sont des entités où les tâches d'un travail sont exécutées. Une fois lancés, ils s'exécutent jusqu'à la fin du cycle de vie de l'application Spark. L'exécution d'une tâche Spark ne s'arrête pas si un exécuteur échoue.

Ensembles de données distribués résilients (RDD)

Il s'agit d'une collection d'ensembles de données immuables et distribués sur les nœuds d'un cluster Spark. Notamment, un cluster est un ensemble de systèmes distribués sur lesquels Spark peut être installé. Les RDD sont divisés en plusieurs partitions. Et, ils sont appelés résilients car ils peuvent résoudre les problèmes de données en cas de défaillance des données.

Les types de RDD pris en charge par Spark sont :

  • Ensembles de données Hadoop créés à partir de fichiers sur Hadoop Distributed File System
  • Collections parallélisées, qui peuvent être basées sur des collections Scala

DAG (Graphique Acyclique Dirigé)

Spark crée un graphique dès qu'un code est saisi dans la console Spark. Si une action (une instruction pour exécuter une opération) est déclenchée, ce graphe est soumis au DAGScheduler .

Ce graphe peut être considéré comme une séquence d'actions de données. DAG se compose de sommets et d'arêtes. Les sommets représentent un RDD et les arêtes représentent les calculs à effectuer sur ce RDD spécifique. C'est ce qu'on appelle un graphe orienté car il n'y a pas de boucles ou de cycles dans le graphe.

Techniques d'optimisation des étincelles

Les techniques d'optimisation Spark sont utilisées pour modifier les paramètres et les propriétés de Spark afin de garantir que les ressources sont utilisées correctement et que les tâches sont exécutées rapidement. Tout cela aide finalement à traiter efficacement les données.

Les techniques d'optimisation Spark les plus populaires sont répertoriées ci-dessous :

1. Sérialisation des données

Ici, un objet en mémoire est converti dans un autre format qui peut être stocké dans un fichier ou envoyé sur un réseau. Cela améliore les performances des applications distribuées. Les deux façons de sérialiser les données sont :

  • Java sérialisation – Le framework ObjectOutputStream est utilisé pour la sérialisation des objets. Le java.io.Externalizable peut être utilisé pour contrôler les performances de la sérialisation. Ce processus offre une persistance légère.
  • Sérialisation Kyro - Spark utilise la bibliothèque de sérialisation Kryo (v4) pour la sérialisation d'objets plus rapides que la sérialisation Java et est un processus plus compact. Pour améliorer les performances, les classes doivent être enregistrées à l'aide de la méthode registerKryoClasses.

2. Mise en cache

Il s'agit d'une technique efficace qui est utilisée lorsque les données sont requises plus souvent. Cache() et persist() sont les méthodes utilisées dans cette technique. Ces méthodes sont utilisées pour stocker les calculs d'un RDD, d'un DataSet et d'un DataFrame. Mais, cache() le stocke dans la mémoire et persist() le stocke au niveau de stockage défini par l'utilisateur.

Ces méthodes peuvent aider à réduire les coûts et à gagner du temps car des calculs répétés sont utilisés.

Lis : Dataframe dans Apache PySpark : tutoriel complet

3. Réglage de la structure des données

Nous pouvons réduire la consommation de mémoire lors de l'utilisation de Spark, en ajustant certaines fonctionnalités Java qui pourraient ajouter des frais généraux. Ceci est possible des manières suivantes :

  • Utilisez des objets énumérés ou des ID numériques à la place des chaînes pour les clés.
  • Évitez d'utiliser beaucoup d'objets et des structures imbriquées compliquées.
  • Définissez l'indicateur JVM sur xx:+UseCompressedOops si la taille de la mémoire est inférieure à 32 Go.

4. Optimisation de la collecte des déchets

Pour optimiser les garbage collectors, G1 et GC doivent être utilisés pour exécuter des applications Spark. Le collecteur G1 gère les tas croissants. Le réglage GC est essentiel en fonction des journaux générés, pour contrôler le comportement inattendu des applications. Mais avant cela, vous devez modifier et optimiser la logique et le code du programme.

G1GC permet de diminuer le temps d'exécution des jobs en optimisant les temps de pause entre les processus.

5. Gestion de la mémoire

La mémoire utilisée pour stocker les calculs, tels que les jointures, les mélanges, le tri et les agrégations, est appelée mémoire d'exécution. La mémoire de stockage est utilisée pour la mise en cache et la gestion des données stockées dans les clusters. Les deux mémoires utilisent une région unifiée M.

Lorsque la mémoire d'exécution n'est pas utilisée, la mémoire de stockage peut utiliser l'espace. De même, lorsque la mémoire de stockage est inactive, la mémoire d'exécution peut utiliser l'espace. C'est l'une des techniques d'optimisation Spark les plus efficaces .

Lisez aussi: 6 fonctionnalités révolutionnaires d'Apache Spark

Conclusion

À partir des différentes techniques d'optimisation Spark , nous pouvons comprendre comment elles contribuent à réduire le temps de traitement et à traiter les données plus rapidement. Les développeurs et les professionnels appliquent ces techniques selon les applications et la quantité de données en question.

Si vous êtes curieux d'en savoir plus sur l'optimisation des étincelles , la science des données, consultez le programme Executive PG en science des données de IIIT-B & upGrad qui est créé pour les professionnels en activité et propose plus de 10 études de cas et projets, des ateliers pratiques, du mentorat avec l'industrie experts, 1-on-1 avec des mentors de l'industrie, plus de 400 heures d'apprentissage et d'aide à l'emploi avec les meilleures entreprises.

Que sont les techniques d'optimisation Spark ?

Apache Spark permet aux entreprises de traiter rapidement les données et de résoudre facilement des problèmes de données complexes. Il est évident que lors du développement de tout programme, il est très important de veiller à ses performances. Les techniques d'optimisation Spark facilitent les calculs de données en mémoire. La seule chose qui peut entraver ces calculs est la mémoire, le processeur ou toute autre ressource.

Chaque technique d'optimisation des étincelles est utilisée dans un but différent et effectue certaines actions spécifiques. Certaines des techniques d'optimisation des étincelles largement utilisées sont :

1. Sérialisation
2. Sélection d'API
3. Avance variable
4. Mettre en cache et persister
5. Fonctionnement ByKey
6. Sélection du format de fichier
7. Réglage de la collecte des ordures
8. Niveau de parallélisme

Quand ne devriez-vous pas envisager d'utiliser Spark ?

Apache Spark a de nombreux cas d'utilisation, mais il existe certains besoins spécialisés pour lesquels vous avez besoin d'autres moteurs de Big Data pour remplir l'objectif. Dans de tels cas, il est recommandé d'utiliser une autre technologie au lieu d'utiliser Spark. Vous trouverez ci-dessous les cas d'utilisation pour lesquels vous ne devriez pas envisager d'utiliser Spark :

1. Faible capacité de calcul – Le traitement par défaut sur Apache Spark a lieu dans la mémoire du cluster. Si vos machines virtuelles ou votre cluster ont peu de capacité de calcul, vous devriez opter pour d'autres alternatives comme Apache Hadoop.
2. Ingestion de données dans un modèle de publication-abonnement - Dans ce cas, il existe plusieurs sources ainsi que plusieurs destinations où des millions de données sont déplacées en peu de temps. Ici, vous ne devriez pas utiliser Spark, mais plutôt Apache Kafka.

Pandas est-il plus rapide qu'Apache Spark ?

Lorsque vous comparez la vitesse de calcul de Pandas DataFrame et de Spark DataFrame, vous remarquerez que les performances de Pandas DataFrame sont légèrement meilleures pour les petits ensembles de données. D'autre part, si la taille des données augmente, on constate que le Spark DataFrame est suffisamment capable de surpasser le Pandas DataFrame. Ainsi, cela dépendra beaucoup de la quantité de données.