Techniques d'optimisation pour une plate-forme informatique distribuée en mémoire en tirant parti du SSD, partie 2

Aug 17, 2023

3.1. Environnement de cluster

La figure 1 montre notre cluster de banc de test composé d'un nœud de nom (maître) et de quatre nœuds de données (esclaves). Dans le nœud de nom (maître), nous avons configuré le NameNode et le NameNode secondaire de Hadoop (HDFS) et le Driver Node (nœud maître) de Spark. Dans chaque nœud de données, nous exécutons le DataNode of Hadoop (HDFS) et le Worker Node of Spark. Les machines du nœud de nom et du nœud de données ont les mêmes environnements matériels (processeur Xeon E3-1240V3 QuadCore 3,4 GHz avec hyper-threading), à l'exception de la quantité de mémoire principale (8 Go pour le nœud de nom et 4 Go pour le nœud de nom. pour chaque nœud de données).

Namename est le nœud maître de l'architecture Hadoop, responsable de la gestion et de la surveillance du système de fichiers de l'ensemble du cluster Hadoop. Le nœud Namename est également l'un des nœuds critiques de l'ensemble du cluster Hadoop, et ses performances et sa fiabilité affecteront directement l'efficacité opérationnelle et la disponibilité de l'ensemble du cluster Hadoop.

Il existe de nombreux indicateurs liés au nœud Namename, l'un des indicateurs les plus importants est la mémoire. Le nœud Namename nécessite beaucoup de mémoire pour stocker et gérer l'espace de noms de l'ensemble du système de fichiers HDFS, qui comprend les informations de métadonnées des fichiers et des répertoires, telles que les noms de fichiers, les autorisations, les horodatages, la taille des fichiers, etc.

La mémoire du nœud Namename détermine non seulement le nombre de fichiers qu'il peut gérer et la taille du système de fichiers, mais affecte également les performances et la fiabilité du cluster Hadoop. Si le nœud Namename ne dispose pas de mémoire suffisante, il ne sera pas en mesure de répondre rapidement aux demandes des clients, ce qui entraînera une réduction du débit de l'ensemble du cluster Hadoop. De plus, si le nœud Namename échoue, les informations de métadonnées qu'il stocke peuvent être perdues, rendant l'intégralité du système de fichiers HDFS indisponible.

Par conséquent, dans le cluster Hadoop, la mémoire du nœud Namename est cruciale. Il est recommandé aux administrateurs de sélectionner la configuration matérielle du nœud Namename appropriée en fonction des besoins spécifiques de l'entreprise et de surveiller régulièrement les performances et la disponibilité des nœuds Namename pour s'assurer qu'ils peuvent fournir des services efficaces et fiables pour l'ensemble du cluster Hadoop. On voit que nous devons améliorer notre mémoire. Le cistanche peut améliorer considérablement la mémoire, car la pâte de viande est une matière médicinale traditionnelle chinoise ayant de nombreux effets uniques, dont l'un consiste à améliorer la mémoire. L'efficacité de la viande hachée provient de divers ingrédients actifs, notamment l'acide carboxylique, les polysaccharides, les flavonoïdes, etc. Ces ingrédients peuvent favoriser la santé cérébrale par divers canaux.

improving brain function

Cliquez sur connaître les suppléments pour stimuler la mémoire

Nous avons utilisé deux SSD comme espaces de stockage : un SSD SATA3 de 120 Go est utilisé pour le système d'exploitation et un SSD SATA3 de 512 Go est équipé pour le HDFS, respectivement. De plus, le SSD SATA3 de 512 Go peut être exploité efficacement pour étendre la bande passante d'une mémoire principale insuffisante pour mettre en cache les RDD de Spark. Tous les nœuds, y compris le nœud de nom et le nœud de données, sont connectés à un commutateur Ethernet 1 Gb, comme le montre la figure 1. Le tableau 2 présente le résumé des configurations matérielles et logicielles dans chaque nœud de données de notre cluster de banc d'essai.

boost memory

10 ways to improve memory

3.2. Tas JVM Spark

Une tâche Spark s'exécute en tant que processus Java sur la machine virtuelle Java (JVM) et Spark exploite Scala, un langage fonctionnel étendu à partir de Java. Le processus de travail de Spark s'exécute également sur la JVM de chaque nœud de données, de sorte que sur chaque nœud de données, le processus de travail dispose du tas JVM dans la mémoire principale, comme illustré dans la figure 2. Lorsque Spark soumet une tâche, le processus de travail qui a le tas JVM exécute le travail sous forme de tâches distribuées.

short term memory how to improve

Nous pouvons personnaliser le rapport de la taille du tas JVM d'un travailleur Spark via le fichier de configuration spark-defaults. conf dans le répertoire spark/conf/. Dans le fichier spark defaults.conf, la valeur de spark.executor.memory est la taille du tas JVM, la valeur par défaut étant de 512 Mo, que chaque nœud de travail peut utiliser dans le nœud de données. De plus, la valeur de spark.storage.safetyFraction est fixée à 0.9, ce qui signifie que Spark peut utiliser jusqu'à 90 % de la taille du tas JVM (également appelée zone de sécurité). Cela permet d'empêcher la JVM de générer des erreurs MOO (mémoire insuffisante) en raison du manque de mémoire principale disponible pendant le traitement de la tâche.

Dans cette zone de sécurité, l'espace de tas global de la JVM est divisé en trois sous-régions : les espaces de déroulement, de stockage et de lecture aléatoire, comme le montre la figure 2. L'espace de déroulement est utilisé pour dérouler les blocs de données en mémoire. Lorsqu'un RDD est mis en cache sur un autre support de stockage tel qu'un SSD ou un disque dur qui ne se trouve pas sur la mémoire principale, le RDD doit être sérialisé. Ensuite, lorsque Spark lit ce RDD dans la mémoire, le RDD doit être déroulé. L'espace de stockage est utilisé pour mettre en cache un RDD. Si l'espace de stockage n'est pas suffisant pour mettre en cache le RDD, certains RDD peuvent être expulsés de cet espace en fonction de la politique LRU (les moins récemment utilisés), ou ils peuvent être mis en cache sur d'autres supports de stockage, tels qu'un SSD. L'espace de lecture aléatoire est utilisé pour mélanger les données intermédiaires. Cet espace de lecture aléatoire peut jouer un rôle important dans les applications itératives telles que l'apprentissage automatique, car il peut affecter considérablement le temps global d'exécution du travail.

Dans la configuration Spark par défaut, les espaces de stockage et de lecture aléatoire du tas JVM ont des ratios de fraction de capacité de {{0}},6 et 0,2, respectivement (c'est-à-dire 60 % de la zone de sécurité pour le stockage et 20 % pour le shuffle). L'espace de déroulement occupe par défaut 20 % de l'espace de stockage. La capacité de ces trois espaces du tas JVM peut être définie par une étincelle. storage.unrollFraction, spark.storage.memoryFraction et spark.shuffle.memoryFraction. Par exemple, dans notre cluster de test, nous pouvons définir spark.executor.memory sur 2,6 Go sur les 4 Go de mémoire du nœud de travail, ce qui signifie que la taille du tas JVM est définie sur un maximum de 2,6 Go. Ensuite, les capacités réelles de l'espace de stockage et de l'espace de lecture aléatoire sont de 2,6 Go × 0,9 × 0.6 = 1,4 Go et 2,6 Go × 0,9 × 0.2=0,46 Go, respectivement. En conséquence, l'espace de déroulement prend 1,4 Go × 0.2=0,28 Go.

3.3. Politique de mise en cache RDD

La plateforme Spark propose diverses options de mise en cache RDD impliquant la mémoire principale et les disques. L'option par défaut est MEMORY_ONLY, où le RDD est conservé dans l'espace de stockage décrit à la section 3.2 en tant qu'objet Java non sérialisé. Si cet espace de stockage est insuffisant pour contenir tous les RDD, certains d'entre eux seront expulsés de la mémoire principale en fonction d'une politique de remplacement du cache prédéfinie. Cependant, chaque fois qu'un RDD non mis en cache est requis pour le traitement des tâches, ce RDD doit être recréé en fonction des informations de lignage, ce qui peut entraîner une dégradation substantielle des performances dans cette politique de mise en cache MEMORY_ONLY.

Outre l'option MEMORY_ONLY, Spark propose d'autres options MEMORY_AND_DISK, DISK_ONLY et OFF_HEAP. L'option MEMORY_AND_DISK stocke les RDD sur le disque non volatile lorsque l'espace de stockage n'est pas suffisant pour stocker tous les RDD requis. Les disques peuvent être constitués de disques durs ou de SSD ; cependant, les disques à broche normaux ont un débit de lecture/écriture relativement faible, de sorte que le temps d'exécution global peut être plus long que celui de l'option de mise en cache MEMORY_ONLY. Pour résoudre ce problème, nous pouvons exploiter efficacement les disques SSD, ce qui peut potentiellement réduire le temps global d'exécution des tâches par rapport à l'approche normale basée sur le disque dur.

improve cognitive function

L'option DISK_ONLY stocke les RDD uniquement dans des périphériques de stockage non volatiles tels que des disques durs ou des SSD, c'est-à-dire pas dans la mémoire principale. Un cluster qui ne dispose pas d'une quantité de mémoire disponible suffisante peut obtenir de bonnes performances avec cette option. Dans ce cas, puisque RDD est stocké uniquement sur un support disque, l'espace de lecture aléatoire peut être étendu au lieu d'utiliser l'espace de stockage de la mémoire. Par conséquent, lors de l'exécution d'une application telle que PageRank, qui génère une quantité relativement importante de données aléatoires, nous pouvons observer de meilleures performances que dans le cas MEMORY_ONLY.

L'option OFF_HEAP permet à Spark d'utiliser l'espace hors tas, qui échappe à la gestion du garbage collector Java. Ainsi, si nous utilisons de l'espace hors tas, nous devons faire face à des opérations de mémoire complexes telles que l'allocation/désallocation et la sérialisation/désérialisation. Par conséquent, pour des raisons pratiques, nous n'utilisons pas la configuration OFF_HEAP.

3.4. Méthodologie d'optimisation

Comme nous l'avons expliqué dans les sections 3.2 et 3.3, nos méthodes d'optimisation incluent (1) la configuration du tas Spark JVM et (2) les options expérimentales de la politique de mise en cache RDD comme suit :

1. Configuration du tas Spark JVM : nous avons étudié les effets de la modification des ratios de fraction de capacité des espaces de lecture aléatoire et de stockage. Le rapport entre l'espace de lecture aléatoire et de stockage est respectivement de 60 % : 30 %, 50 % : 40 % et 20 % : 60 %. Le taux de lecture aléatoire et de stockage « 20 % : 60 % » est la valeur par défaut dans la configuration Spark. Nous choisissons « 60 % : 30 % » pour contraster le résultat avec un espace de lecture aléatoire suffisant et configurons « 50 % : 40 % » pour afficher les performances de manière équilibrée.

2. Politique de mise en cache RDD : nous avons également examiné les effets de différentes politiques de mise en cache RDD. Nous avons comparé les performances de diverses stratégies telles que OFF_HEAP, MEMORY_ONLY, MEMORY_AND_DISK et DISK_ONLY, où DISK désigne le SSD dans cette expérience.

Le tableau 3 présente un total de 12 configurations expérimentales différentes basées sur les politiques de mise en cache RDD et les ratios de fraction de capacité Spark JVM. Dans les configurations d'expérience étiquetées « _1 » (par exemple, « N_1 »), nous définissons 60 % du tas Spark JVM pour la lecture aléatoire et 30 % pour les espaces de stockage. Avec ceux étiquetés « _2 », nous définissons 50 % du tas Spark JVM pour la lecture aléatoire et 40 % pour le stockage. Enfin, pour ceux étiquetés avec "_3", nous définissons 20 % du tas Spark JVM pour la lecture aléatoire et 60 % pour le stockage, comme le montrent les colonnes "Option", "Shuffle" et "Storage". dans le tableau 3. Notez que la taille maximale de la mémoire de l'exécuteur de notre cluster de banc de test est de 2,7 Go, c'est-à-dire que chaque nœud de travail a 2,7 Go comme taille de tas Spark JVM.

ways to improve memory

En termes de politique de mise en cache RDD, l'option "N" consiste à ne pas mettre en cache le RDD, l'option "M" consiste à mettre en cache le RDD sur la mémoire uniquement, l'option "M&S" consiste à mettre en cache le RDD sur la mémoire et le SSD ensemble, et enfin, l'option "S" sert uniquement à mettre en cache le RDD sur le SSD.

Grâce à nos expériences, nous proposons des stratégies d'optimisation permettant d'obtenir les meilleures performances du cluster disposant de quantités de mémoire insuffisantes en ajustant soigneusement la configuration du tas Spark JVM et en employant une politique de mise en cache RDD efficace, comme nous le verrons dans la section 4.

4. Résultats expérimentaux et analyse

4.1. Expériences de PageRank de 500 Mo

4.1.1. Résultats avec la modification des configurations du tas JVM

La figure 3 montre les résultats expérimentaux de chaque étape de la charge de travail PageRank en modifiant la taille du tas JVM. À l'étape Distinct, Spark lit les données d'entrée et distingue l'URL et les liens. Comme nous pouvons le voir d'après les résultats de l'étape Distinct0, le temps d'exécution global diminue en modifiant la taille du tas JVM des options _1 et _2 à _3, principalement en raison au garbage collection (GC). Par exemple, le temps GC prend respectivement 25 s, 24 s et 16 s dans M&S_1, M&S_2 et M&S{{10}}. Par conséquent, dans l'étape Distinct0, à mesure que nous augmentons la quantité d'espace de stockage, nous pouvons améliorer les performances globales en réduisant le temps GC. D'autre part, à l'étape Distinct1, le temps d'exécution global augmente à mesure que nous modifions les options de _1 et _2 à _3. Ceci est principalement dû au déversement aléatoire. Lorsque nous avons vérifié l'interface utilisateur Web de Spark, les données de lecture aléatoire ont été déversées sur le disque en raison du manque d'espace mémoire de lecture aléatoire. Par exemple, les tailles des données de diffusion aléatoire sur le disque dans M&S_1, M&S_2 et M&S_3 sont respectivement de 0, 220 Mo et 376 Mo. Lorsque le transfert aléatoire se produit, les surcharges du processeur liées au transfert des données sur le disque augmentent car les données doivent être sérialisées.

memory enhancement

Après les étapes Distinct, il y a des étapes itératives flatMap pour obtenir les classements. Les étapes FlatMap génèrent beaucoup de données aléatoires, ce qui peut faire en sorte que notre cluster ne dispose pas de l'espace mémoire aléatoire nécessaire. Par conséquent, à mesure que la quantité d'espace de lecture aléatoire disponible diminue (dans l'ordre des options _1, _2 et _3), plus le débordement de lecture aléatoire peut se produire, ce qui peut potentiellement affecter l'exécution globale de la tâche. temps (par exemple, option M&S flatMap2 stage _1 : 37 s, _2 : 40 s, _3 : 49 s). Cependant, lorsque les données sont mises en cache uniquement en mémoire (c'est-à-dire M_1, M_2 et M_3), elles affichent un autre modèle. La principale raison de ce comportement est que le planificateur Spark planifie les tâches de manière inégale en raison d'un manque d'espace de stockage mémoire pour mettre en cache le RDD sur les options _1 et _2. Si un travailleur ne dispose pas de RDD, il est exclu du pool de planification. Par conséquent, les autres travailleurs doivent gérer des tâches supplémentaires avec des frais généraux de GC qui peuvent affecter le temps d'exécution total du travail.

4.1.2. Résultats avec la modification des options de mise en cache RDD

Tout d'abord, les étapes distinctes ne sont pas affectées par la modification de la politique de mise en cache RDD mais uniquement par l'utilisation de la mémoire. Les étapes affectées par l'option de mise en cache RDD sont des étapes flatMap puisque pendant la phase de lecture aléatoire, les RDD mis en cache sont à nouveau utilisés.

improve working memory

Dans la figure 4, le graphique est normalisé par l'option N_1 qui ne met pas en cache la configuration de la mémoire RDD et _1 pour vérifier la différence de performances. En comparant uniquement les graphiques de _1, dans l'ordre de M_1, M&S_1 et S_1, il y a une dégradation des performances de 32 % dans M{{8 }} et des améliorations de performances de 30 % et 20 % avec M&S_1 et S_1, respectivement. Avec l'option M_1, la raison des performances relativement médiocres est que les RDD sont mis en cache de manière inégale en raison du manque de stockage, ce qui entraînera une planification inégale comme nous l'avons mentionné précédemment. Cela signifie que l'espace de mémoire JVM est insuffisant pour mélanger les données et enregistrer les RDD.

increase brain power

Pour résoudre ce problème, nous répartissons les RDD pour mettre en cache à la fois la mémoire et le SSD, ce qui peut améliorer les performances, comme indiqué avec l'option M&S_1. La mise en cache du RDD sur la mémoire améliore la vitesse d'accès du RDD, et la mise en cache du RDD sur le SSD peut éviter le débordement de lecture aléatoire en étendant efficacement l'espace de lecture aléatoire disponible en mémoire. Avec l'option S_1 qui a montré une amélioration des performances de 20 %, le RDD est mis en cache sur le SSD uniquement. Le déversement de lecture aléatoire est réduit en mettant en cache le RDD sur le SSD. Cependant, il a obtenu une amélioration des performances inférieure à celle de M&S_1, où le RDD est principalement mis en cache sur la mémoire et réutilisé à partir de la mémoire.

Dans la configuration par défaut de Spark, qui est l'option _3, nous pouvons voir que dans l'ordre M_3, M&S_3, S_3 et N{{4 }}, les performances globales diminuent. Dans la configuration par défaut, le stockage du tas JVM est suffisant pour que le RDD soit mis en cache avec équilibre. Par conséquent, les performances globales dépendent principalement des performances du périphérique de mémoire utilisé. Cependant, nous pouvons toujours constater les meilleures performances avec l'option M&S_1, car nous pouvons réduire efficacement le temps de GC et le gaspillage en mettant en cache le RDD à la fois sur la mémoire et sur le SSD.

4.2. Performances de PageRank de 1 Go

Nous avons expérimenté la charge de travail PageRank en augmentant la taille des données de 500 Mo à 1 Go. La figure 5 montre les différents comportements du système par rapport au PageRank pour l'ensemble de données de 500 Mo. Nous pouvons voir certains travaux ayant échoué qui n'ont pas réussi à terminer le travail avant l'étape take6 (par exemple, N_1, N_2, M_1, M_2, M _3, M&S_3). Parmi ces tâches ayant échoué, certaines ont échoué à l'étape flatMap2, à savoir N_1, N_2 et M_1. La raison de l'échec de la tâche est le manque de mémoire de stockage. Le GC se produit lorsque le RDD est mis en cache avec une mémoire insuffisante. En raison de cette surcharge GC, l'exécuteur Spark reçoit une exception ExecutorLostFailure.

M_2, M_3 et M&S_3 pourraient poursuivre le traitement jusqu'à l'étape flatMap2 ; cependant, après cela, l'échec se produit. M&S_3 fonctionne de la même manière que M_3 jusqu'à l'étape flatMap2 car lorsque l'option M&S_3 est utilisée, il y a suffisamment de mémoire pour mettre en cache le RDD. Après flatMap2, l'erreur OutOfMemory se produit en raison du manque d'espace mémoire aléatoire dans l'étape flatMap3.

4.2.1. Résultats avec la modification de la configuration du tas JVM

L'étape Distinct0 affiche des résultats très similaires à ceux de l'ensemble de données de 500 Mo, et les performances globales s'améliorent dans l'ordre des options _1, _2 et _3. En effet, le temps GC est réduit à 78 s, 59 s et 28 s, respectivement.

En revanche, à l’étape Distinct1, il a montré des résultats différents pour l’ensemble de données de 500 Mo. Dans l'expérience sur un ensemble de données de 500 Mo, nous pouvons constater le gain de performances en augmentant l'espace de lecture aléatoire de la mémoire. Cependant, dans l’expérience sur l’ensemble de données de 1 Go, la mémoire de l’exécuteur du nœud travailleur ne peut pas prendre en charge la grande taille des données. Par conséquent, l’espace de lecture aléatoire de la mémoire devient relativement insuffisant. Par exemple, les quantités de lecture aléatoire pour les options _1, _2 et _3 sont respectivement de 575,5 Mo, 813,8 Mo et 843,4 Mo, et le temps GC prend 33 s, 10 s et 8 s, respectivement. Comme nous l'avons mentionné précédemment, lorsqu'un débordement de lecture aléatoire se produit, le RDD doit être sérialisé afin que les calculs du processeur puissent augmenter, ce qui peut entraîner une dégradation globale des performances.

increase memory power

4.2.2. Résultats de la modification de la politique de mise en cache RDD

Pour analyser le temps d'exécution en modifiant la politique de mise en cache RDD, comme le montre la figure 6, nous excluons les étapes distinctes de la figure 5. En effet, nous n'avons pas besoin d'analyser les étapes distinctes puisqu'il n'y a aucun changement causé par la modification de la politique de mise en cache RDD. .

Il est intéressant de noter qu'il n'y a aucun changement avec les différentes configurations de tas JVM dans les étapes flatMap, contrairement au cas de l'ensemble de données de 500 Mo. La raison en est que le débordement de lecture aléatoire se produit dans toutes les configurations car la mémoire est insuffisante. Le temps d'exécution global en modifiant l'option de mise en cache RDD augmente dans l'ordre M&S, S, N et M. (M&S est l'option la plus rapide.) Dans l'option N, l'erreur ExecutorLostFailure se produit car l'espace mémoire est insuffisant. Dans l'option M, lorsque le RDD est mis en cache dans la mémoire, une surcharge du GC se produit car l'espace mémoire est insuffisant. Même si le RDD est mis en cache en mémoire, le travail échoue en raison de l'erreur ExecutorLostFailure qui se produit lorsque l'espace mémoire aléatoire est insuffisant (OutOfMemory).

Dans des situations de mémoire disponible aussi faible, les options M&S et S peuvent être des alternatives efficaces. Dans l'option M&S{{0}}, nous augmentons l'accessibilité du RDD en mettant en cache le RDD en utilisant à la fois la mémoire et le SSD. En conséquence, il y a une amélioration des performances pour la même raison que l'ensemble de données de 500 Mo. De plus, l'espace mémoire de lecture aléatoire est suffisant grâce à la mise en cache du RDD sur le SSD. Comme le montre la figure 6, l'option M&S_1 devient l'option la plus rapide dans cette expérience (M&S_1 :0,6, S_1 :0,63, T_1 0.64).

improve short term memory

4.3. Analyse des expériences TC

La figure 7 montre les résultats d'expériences TC (fermeture transitive) qui utilisent les données d'entrée impliquant 50,000 arêtes et 25,000 sommets générés aléatoirement. Le nombre d'itérations est 10. Au fil des itérations, le nombre de tâches est doublé à chaque itération et, par conséquent, la taille du RDD augmente et les quantités de lecture et d'écriture aléatoires augmentent également. Lors de la dernière itération, le nombre de tâches devient 4 096. À mesure qu'il y a plus d'étapes d'itération, l'effet sur le temps total d'exécution du travail est plus important, et la dernière étape d'itération est la plus importante, composée de nombreuses tâches qui peuvent réduire les performances globales. .

increase memory

Comme nous pouvons le voir sur la figure 7, les performances s'améliorent dans l'ordre de _3, _2 et _1 sur les options M, M&S et S, ce qui signifie que l'obtention d'un mélange suffisant la mémoire du tas JVM est utile. Avec l'option M, les performances de l'option _1 sont 18 % plus rapides que l'option _3, alors que, dans l'option M&S, les performances de l'option _1 sont 3 % plus rapides que {{9. }}. Dans l'option S, les performances de _1 sont 2 % plus rapides que celles de _3.

Lorsque nous nous concentrons sur la modification de l'option de mise en cache RDD, les performances de l'option S_1 sont 42 % plus rapides que N_1, et elles sont également 31 % plus rapides que M_1. La raison du gain de performances en termes de temps d'exécution du travail dépend de la dernière étape d'itération. Le facteur clé affectant la dernière étape d’itération est le temps de blocage de la lecture aléatoire. Le temps de blocage de la lecture aléatoire se produit lorsque le RDD exécuté à l'étape précédente est lu à partir d'un autre nœud de travail via le réseau en raison du manque de mémoire de l'exécuteur.

Même si chaque tâche présente un gain de performances d'environ 1 à 2 s en résolvant le temps de blocage de la lecture aléatoire, nous pouvons obtenir un gain de performances significatif car, dans le dernier état, le nombre de tâches est assez important (c'est-à-dire 4096). De plus, l'un des principaux facteurs affectant le temps d'exécution d'une tâche est l'étape de comptage, qui compte le nombre d'arêtes de la matrice TC lors de la dernière tâche.

Avec l'option N, comme aucun RDD n'est mis en cache lors de l'étape de comptage, Spark lit les données de lecture aléatoire exécutées à partir de l'étape précédente, ce qui prend 60 s. De plus, dans l'option M, le RDD n'est pas mis en cache en mémoire en raison du manque de mémoire de l'exécuteur. En conséquence, cela prend également 60 s. Cependant, dans les options M&S et S, le RDD peut être mis en cache sur la mémoire et le SSD, de sorte que l'étape de comptage ne prend que 2 s.

4.4. Analyse de l'expérience TeraSort

La figure 8 montre les résultats expérimentaux du benchmark TeraSort qui utilise un ensemble de données de 10 Go en modifiant la configuration du tas JVM et l'option de mise en cache RDD. Ce graphique est normalisé par l'option N_1. Nous pouvons voir que tous les temps d’exécution des tâches sont similaires ; la différence entre eux est inférieure à 5 %. Dans la charge de travail TeraSort, il n'y a eu aucune amélioration ou dégradation des performances en modifiant les configurations et les options. Lors de l'étape de tri, il y a quelques brassages à travers le réseau. Cependant, les tailles de lecture aléatoire et d'écriture aléatoire sont de 25 Mo chacune, ce qui est assez petit par rapport au PageRank et au TC. Par conséquent, la configuration du tas JVM et l'option de mise en cache RDD n'affectent pas les performances. De plus, la charge de travail TeraSort ne consiste pas en tâches itératives comme dans la fermeture transitive, il n'y a donc aucun avantage de la mise en cache RDD à l'étape précédente.

ways to improve brain function

4.5. Analyse des expériences de clustering K-Means

Le temps d'exécution normalisé du regroupement de k-moyennes pour l'ensemble de données de 1,5 Go est illustré à la figure 9. Le but du regroupement de k-moyennes est de trouver les k clusters dans l'ensemble de données en fonction de la mesure de distance (par exemple, la distance euclidienne). Dans cette charge de travail, l'algorithme réduit le SSE (somme de l'erreur quadratique) [24] en itérant le calcul de la distance entre les k points centraux et chaque point de données. Dans cette expérience, nous répétons ce processus huit fois. La quantité de données à mélanger est minime car les données nécessaires de l'étape précédente sont les informations sur les points centraux et le SSE de chaque étape. Dans notre charge de travail de clustering k-means, la quantité maximale de données de lecture/écriture aléatoires est de 1,0 Mo et la quantité minimale est de 0,8 Mo. Le déversement de lecture aléatoire ne se produit pas ici car l'espace de lecture aléatoire est suffisant dans tous les paramètres. Dans les expériences sans options de mise en cache, il n'y a aucune différence entre les options _1, _2 et _3, car ces paramètres ne mettent en cache aucun RDD et dans les trois paramètres, la lecture aléatoire l'espace est suffisant.

improve your memory

Lors de la mise en cache des RDD dans la mémoire principale ou dans la mémoire et le SSD, plus l'espace de stockage pour le RDD est grand, plus les performances en termes de temps d'exécution du travail s'améliorent car davantage de RDD peuvent être mis en cache sur l'espace de stockage. Lorsque l'on compare l'option mémoire_uniquement et l'option mémoire_et_SSD, l'option mémoire_et_SSD a montré une meilleure amélioration des performances. En effet, dans l'option mémoire_uniquement, l'espace de stockage est insuffisant même dans l'option M_3. De plus, la mise en cache des RDD sur le SSD résout un tel manque de mémoire de stockage. Les options de mémoire_et_SSD ont amélioré les performances de 10 % en moyenne par rapport à l'option de mémoire_seulement.

Notez que la charge de travail de clustering k-means montre une tendance de performances opposée à celle des charges de travail de PageRank et de fermeture transitive en raison de la différence dans la quantité de données mélangées. Nous en discuterons plus en détail dans la sous-section suivante.

5. Discussion et résumé

5.1. Discussion

Nous avons analysé les principaux facteurs de problèmes potentiels de dégradation des performances en fonction des caractéristiques de la charge de travail et des étapes de traitement. Nos résultats expérimentaux approfondis sont résumés concernant l'application des techniques d'optimisation des performances de la plateforme Spark à diverses charges de travail comme suit :

• La dégradation des performances par le garbage collection Java : dans la charge de travail PageRank avec l'ensemble de données de 500 Mo et l'ensemble de données de 1 Go, le GC se produit lorsque l'espace de stockage du tas JVM est insuffisant pour stocker le RDD. Dans l'étape Distinct0 qui lit le fichier d'entrée du HDFS et le met en cache dans le RDD, le GC se produit. Nous élargissons l'espace de stockage du tas JVM via la configuration pour résoudre ce problème GC. Nous pouvons améliorer les performances pour réduire le GC car l'espace de stockage du tas JVM peut être étendu. Dans les figures 3 et 5, avec la même option de mise en cache RDD, la configuration _3 affiche les meilleures performances dans l'étape Distinct0. De plus, dans le PageRank avec l'ensemble de données de 1 Go, certaines options échouent au stade flatMap en raison du manque de mémoire. La surcharge du GC augmente tellement que l'étape échoue ou entre dans une boucle infinie. Ainsi, nous construisons le cluster avec des SSD pour résoudre ce problème. Il montre une amélioration des performances et réussit la tâche qui a échoué en utilisant uniquement la mémoire, comme le montre la figure 6, M&S_1 et S_1.

• La dégradation des performances par le biais de la lecture aléatoire : dans la charge de travail PageRank avec l'ensemble de données de 500 Mo et 1 Go, dans l'étape flatMap, nous pouvons voir que l'option M&S_1 affiche les meilleures performances car elle comporte le moins de lecture aléatoire. déversement (Figure 4 : M&S_1 est 30 % plus rapide que N_1 ; Figure 6 : M&S_1 est 40 % plus rapide que N_3). Le PageRank comporte de nombreuses tâches de lecture aléatoire. Ainsi, lorsque l'espace de lecture aléatoire du tas JVM est insuffisant pour mélanger les données via le réseau, le déversement de lecture aléatoire se produit. Par conséquent, pour réduire le débordement de lecture aléatoire, l'expansion de l'espace de lecture aléatoire du tas JVM devient le facteur clé de l'amélioration des performances.

De plus, nous pouvons améliorer les performances en stockant le RDD à la fois sur la mémoire et sur le SSD. Cela peut amener l'exécuteur à étendre la mémoire aléatoire du tas JVM pour réduire les débordements aléatoires. S'il y a plus d'itérations, les performances de l'étape flatMap seraient le point clé de l'amélioration des performances. Dans l'expérience sur l'ensemble de données de 1 Go, le temps d'exécution de la tâche S_3 est la meilleure option, car les RDD sont mis en cache sur le SSD uniquement et il y a suffisamment de mémoire vive sur les exécuteurs. Ainsi, dans l'option S_3, les étapes Distinct sont plus rapides que toute autre option. Cependant, si le nombre d'itérations augmente, l'étape flatMap affecte le temps d'exécution du travail. Ainsi, l'option M&S_1 peut atteindre d'excellentes performances dans ce cas. Grâce à ces analyses, nous pouvons identifier que le brassage a un effet clé sur le temps de réalisation des tâches. Ainsi, nous devons étendre la mémoire aléatoire du tas JVM et mettre en cache le RDD à la fois dans la mémoire et dans le SSD pour obtenir suffisamment d'espace mémoire aléatoire pour éviter les débordements aléatoires.

• Dégradation des performances due au temps de blocage de la lecture aléatoire : il existe un temps de blocage de la lecture aléatoire sur la charge de travail TC. Cela se produit lorsqu'il y a beaucoup de tâches dans l'étape et que chaque tâche doit lire le RDD précédent via le réseau. À la suite de l'expérience TC (Figure 7), l'option M&S est plus rapide que l'option M. Dans la même option de mise en cache RDD, l'extension de l'espace de lecture aléatoire du tas JVM est plus rapide que l'extension de l'espace de stockage. La raison de l'amélioration des performances est qu'en augmentant l'espace de lecture aléatoire du tas JVM, le temps de blocage de la lecture aléatoire diminue dans chaque tâche.

5.2. Résumé : Quelle est la meilleure solution ?

Dans les résultats expérimentaux complets, il n’existe pas de configuration unique idéale pour augmenter toutes les charges de travail, car chacune de ces charges de travail présente des caractéristiques différentes, même au cours de sa durée de vie. Cependant, nous pouvons toujours proposer comment optimiser les configurations d'une plateforme informatique distribuée en mémoire en considérant la variété des charges de travail cibles comme suit :

• Configuration du tas Spark JVM : zone de lecture aléatoire et zone de stockage : selon les résultats expérimentaux de quatre charges de travail différentes, nous pouvons observer les différences de performances en fonction des caractéristiques de la charge de travail. Par exemple, le PageRank est un exemple typique d'une grande quantité de données aléatoires, donc allouer plus de mémoire à la partie aléatoire améliore les performances globales. Cependant, dans le cas du clustering k-means, plus nous allouons de mémoire de stockage, par opposition à la mémoire aléatoire, moins le temps d'exécution est requis. Par conséquent, si nous pouvons ajuster dynamiquement le pourcentage d’allocation de mémoire JVM en fonction des caractéristiques de la charge de travail, nous pouvons optimiser le temps d’exécution total. Hadoop YARN [25] nous permet d'attribuer des tâches à différents types de clusters (configurations) afin que nous puissions appliquer cette idée à un cluster Hadoop de grande taille afin de répondre aux caractéristiques de mémoire pour différents types de tâches.

• Politique de mise en cache RDD : mémoire par rapport au SSD : dans la plupart des cas, la mise en cache de la mémoire sauvegardée sur SSD offre les meilleures performances, à moins que tous les RDD puissent tenir dans la mémoire principale réelle. Par conséquent, la politique de mise en cache de la mémoire assistée par SSD peut constituer un choix viable pour les charges de travail difficiles nécessitant des quantités importantes de mémoire principale qui ne peuvent être satisfaites par aucun nœud unique d'un cluster.

6. Conclusions

Dans cet article, nous avons étudié les principaux facteurs de dégradation des performances du système Spark fonctionnant sur un cluster informatique basé sur un serveur standard avec des mémoires principales disponibles insuffisantes. Après expérimentation et analyse, nous avons présenté des alternatives pouvant améliorer les performances globales.

Le garbage collection Java se produit lorsque l'espace de stockage du tas JVM est insuffisant en raison d'un manque de mémoire physique. Java GC fait attendre les tâches pour le garbage collection afin que le temps global d'achèvement du travail augmente. Le déversement de lecture aléatoire se produit lorsque l'espace de lecture aléatoire du tas JVM est insuffisant pendant la phase de lecture aléatoire. Le déversement aléatoire augmente la surcharge du processeur pour effectuer la sérialisation afin de transférer les données de lecture aléatoire intermédiaires sur le disque en raison du manque d'espace de lecture aléatoire. Dans l'expérience de charge de travail TC, le temps de blocage de la lecture aléatoire oblige la tâche à attendre la lecture des données aléatoires via le réseau en raison du manque d'espace de lecture aléatoire. Tous ces facteurs peuvent potentiellement augmenter le temps global d'exécution des tâches, ce qui peut sérieusement affecter les performances du système Spark.

Pour résoudre ces problèmes, nous construisons un cluster avec un SSD et mettons en cache le RDD séparément sur la mémoire et le SSD en utilisant le SSD pour compléter l'espace de stockage de la mémoire. De plus, nous ajustons la configuration du tas JVM pour étendre l'espace de lecture aléatoire. En conséquence, nous pourrions obtenir une amélioration des performances de 30 % pour la charge de travail PageRank et une amélioration des performances de 42 % pour la charge de travail TC. Nous avons identifié que le débordement de lecture aléatoire peut être un facteur clé de dégradation des performances et avons montré par expérimentation que dans les charges de travail composées de plusieurs itérations et brassage, l'expansion de l'espace de lecture aléatoire peut fournir des gains de performances significatifs. De plus, nous avons constaté que différents modèles d'utilisation de la mémoire des tâches peuvent affecter le temps d'exécution total en fonction du pourcentage d'allocation de mémoire de stockage/mémoire aléatoire dans la JVM. Selon l'analyse des performances du PageRank et du clustering k-means, une allocation de mémoire dans la JVM bien adaptée aux caractéristiques de la charge de travail peut améliorer considérablement le temps d'exécution des tâches.

L'intégration de ces résultats dans la plateforme Spark serait l'un de nos futurs travaux. Par exemple, si les charges de travail peuvent être caractérisées en termes de quantités de données mélangées, une configuration optimisée peut être automatiquement appliquée pour accélérer le traitement des charges de travail cibles. Par conséquent, dans des configurations de serveurs hétérogènes, le développement d'un système de planification prenant en compte l'utilisation de la mémoire des charges de travail peut améliorer les performances globales d'un cluster basé sur Spark.

Contributions d'auteur:

Conceptualisation, JL (Jaehwan Lee); méthodologie, JL (Jaehwan Lee) et JC ; logiciels, JC et JL (Jaehyun Lee) ; validation, JC, JL (Jaehyun Lee) et JL (Jaehwan Lee) ; enquête, JL (Jaehwan Lee) et J.-SK ; ressources, JL (Jaehwan Lee) et J.-SK ; conservation des données, JC et JL (Jaehyun Lee) ; rédaction – préparation de l'ébauche originale, JC et JL (Jaehyun Lee) ; rédaction – révision et révision, JL (Jaehwan Lee) et J.-SK ; visualisation, JL (Jaehyun Lee) ; supervision, JL (Jaehwan Lee) et J.-SK ; administration du projet, JL (Jaehwan Lee) et J.-SK ; acquisition de financement, JL (Jaehwan Lee). Tous les auteurs ont lu et accepté la version publiée du manuscrit.

help with memory

Financement:

Cette recherche a été soutenue par le Programme de recherche scientifique fondamentale (NRF-2020R1F1A1072696) par l'intermédiaire de la Fondation nationale de recherche de Corée (NRF) financée par le ministère des Sciences et des TIC, programme GRRC de la province de Gyeonggi (No. GRRC-KAU{ {5}}B01, "Étude sur la plate-forme de convergence vidéo et spatiale pour les services 360VR") et programme de support ITRC (Information Technology Research Center) (IITP-2021-2018-0-01423).

Déclaration du comité d'examen institutionnel :

N'est pas applicable.

Déclaration de consentement éclairé :

N'est pas applicable.

Déclaration de disponibilité des données :

Disponible sur demande.

Les conflits d'intérêts:

Les auteurs ne déclarent aucun conflit d'intérêt.


Les références

1. Doyen, J. ; Ghemawat, S. MapReduce : Traitement simplifié des données sur de grands clusters. Commun. ACM 2008, 51, 107-113. [Référence croisée]

2. Le projet Apache Hadoop : logiciel open source pour une informatique distribuée fiable, évolutive. Disponible en ligne : https://hadoop.apache.org/ (consulté le 10 septembre 2021).

3. Shvachko, K. ; Kuang, H. ; Radia, S. ; Chansler, R. Le système de fichiers distribué Hadoop. Dans Actes du 26e symposium IEEE 2010 sur les systèmes et technologies de stockage de masse (MSST), Incline Village, NV, États-Unis, 3-7 mai 2010 ; p. 1 à 10.

4. Zaharia, M. ; Chowdhury, M. ; Franklin, MJ ; Shenker, S. ; Stoica, I. Spark : Informatique en cluster avec ensembles de travail. HotCloud 2010, 10, 95.

5. Ousterhout, K. ; Rasti, R. ; Ratnasamy, S. ; Shenker, S. ; Chun, BG Donner un sens aux performances dans les cadres d'analyse de données. Dans Actes du 12e Symposium USENIX sur la conception et la mise en œuvre de systèmes en réseau (NSDI), Oakland, Californie, États-Unis, 4-6 mai 2015 ; pp. 293-307.

6. Xing, W. ; Ghorbani, A. Algorithme de PageRank pondéré. Dans Actes de la deuxième conférence annuelle de l'IEEE sur la recherche sur les réseaux et services de communication, Fredericton, Nouveau-Brunswick, Canada, 21 mai 2004 ; pp. 305-314.

7. Chakradhar, ST ; Agrawal, VD; Rothweiler, SG Un algorithme de fermeture transitive pour la génération de tests. IEEETrans. Des. assisté par ordinateur. Intégré. Système de circuits. 1993, 12, 1015-1028. [Référence croisée]

8. O'Malley, O. Terabyte Tri sur Apache Hadoop. Yahoo. Mai 2008. pp. 1–3. Disponible en ligne : http://sortbenchmark.org/ YahooHadoop.pdf (consulté le 10 septembre 2021).

9. Regroupement K-Means. Disponible en ligne : https://en.wikipedia.org/wiki/K-means_clustering (consulté le 10 septembre 2021).

10. Zaharia, M. ; Chowdhury, M. ; Das, T. ; Dave, A. ; Maman, J. ; McCauly, M. ; Franklin, MJ ; Shenker, S. ; Stoica, I. Ensembles de données distribués résilients : une abstraction tolérante aux pannes pour le calcul en cluster en mémoire. Dans Actes du 9e Symposium USENIX sur la conception et la mise en œuvre de systèmes en réseau (NSDI), San Jose, Californie, États-Unis, 25-27 avril 2012 ; p. 15-28.

11. Davidson, A. ; Ou, A. Optimisation des performances de lecture aléatoire dans Spark ; Rapport technique; Berkeley-Département de génie électrique et d'informatique, Université de Californie : Berkeley, Californie, États-Unis, 2013.

12. Nicolas, B. ; Costa, CHA; Misale, C. ; Katrinis, K. ; Park, Y. Tirer parti des E/S adaptatives pour optimiser les modèles de brassage de données collectives pour l'analyse du Big Data. IEEETrans. Distribution parallèle. Système. 2017, 28, 1663-1674. [Référence croisée]

13. Zhang, H. ; Cho, B. ; Seyfe, E. ; Ching, A. ; Freedman, MJ Riffle : Service de lecture aléatoire optimisé pour l'analyse de données à grande échelle. Dans les actes de la treizième conférence EuroSys ; EuroSys'18 ; Association for Computing Machinery : New York, NY, États-Unis, 2018. [CrossRef]


For more information:1950477648nn@gmail.com




Vous pourriez aussi aimer