Quand brassage se produire dans Apache Spark?
Je suis l'optimisation des paramètres dans l'Étincelle, et voudrais savoir exactement comment Spark est mélanger les données.
Précisément, j'ai un simple word count programme, et voudrais savoir comment spark.shuffle.fichier.de la mémoire tampon.ko affecte le temps d'exécution. Maintenant, je ne vois que des ralentissement quand je fais ce paramètre très élevé (je suppose que cela empêche toutes les tâches de la mémoire tampon de montage en mémoire simultanément).
Quelqu'un pourrait-il expliquer comment Spark est l'exécution de réductions? Par exemple, les données sont lues et partitionné en un EDR, et quand une "action" de la fonction est appelée, la Spark envoie des tâches pour les nœuds de travail. Si l'action n'est pas une réduction, comment ne Étincelle gérer cela, et comment sont-lecture aléatoire de fichiers /tampons liés à ce processus?
OriginalL'auteur cnnrznn | 2015-07-13
Vous devez vous connecter pour publier un commentaire.
Question : pour ce qui est de votre question concernant quand brassage est déclenchée sur la Spark?
Réponse : Tout
join
,cogroup
, ouByKey
opération consiste à tenir les objets dans hashmaps ou dans la mémoire tampon de groupe ou de tri.join
,cogroup
, etgroupByKey
utiliser ces structures de données tâches pour les étapes sur la récupération de côté le mélange qu'ils déclenchent.reduceByKey
etaggregateByKey
utiliser des structures de données dans les tâches pour les étapes sur les deux côtés de la brouille qu'ils déclenchent.Explication : Comment shuffle opération de travail dans l'Étincelle?
La lecture aléatoire de l'opération est mis en œuvre différemment dans l'Étincelle par rapport à Hadoop. Je ne sais pas si vous êtes familier avec la façon dont il fonctionne avec Hadoop, mais concentrons-nous sur la Spark pour l'instant.
Sur le coté carte, chaque carte tâche Spark écrit une lecture aléatoire de fichiers (os disque tampon) pour chaque réducteur – ce qui correspond à un bloc logique dans Spark. Ces fichiers ne sont pas d'intermédiaire dans le sens que l'Étincelle n'est pas de les fusionner en plus partitionné. Depuis la surcharge de planification de l'Étincelle est moindre, le nombre de contributeurs (
M
) et les réducteurs(R
) est nettement plus élevé que dans Hadoop. Ainsi, l'expéditionM*R
fichiers à l'réducteurs pourrait entraîner d'importants frais généraux.Similaire à Hadoop, Spark également fournir un paramètre
spark.shuffle.compress
pour spécifier la compression des bibliothèques pour compresser la carte des sorties. Dans ce cas, il pourrait êtreSnappy
(par défaut) ouLZF
.Snappy
utilise uniquement 33KB de tampon pour chaque fichier ouvert et réduit considérablement les risques de rencontrer des hors-la mémoire des erreurs.Sur le réduire la côté, Étincelle exige que tous les déplacés de données pour tenir en mémoire de la correspondante du groupe de travail réducteur, au contraire de Hadoop, qui disposait d'une option de déversement cela sur le disque. Ce serait bien sûr se produire que dans les cas où le réducteur exigences de la tâche tout en traînant les données pour un
GroupByKey
ou unReduceByKey
opération, par exemple. Étincelle déclenche un souvenir d'exception dans ce cas, qui a été très difficile pour les développeurs jusqu'à présent.Aussi avec Spark il n'y a pas de chevauchement de la phase de copie, contrairement à Hadoop qui a un chevauchement copie de la phase où les cartographes envoyer des données à l'réducteurs avant même la carte est complète. Cela signifie que le shuffle est un pull opération Spark, par rapport à un pousser opération dans Hadoop. Chaque réducteur doit également maintenir un réseau de tampon d'extraction de la carte de sorties. La taille de ce tampon est spécifié par le paramètre
spark.reducer.maxMbInFlight
(par défaut, il est 48MO).Pour plus d'informations sur brassage dans Apache Spark, je vous propose la suite de lectures :
La réponse de l'un est assez long. Je vous suggère de lire la réponse à cette question
Ne Étincelle exige que tous les déplacés de données pour tenir en mémoire de la correspondante du groupe de travail réducteur encore? ReduceByKey opération dans mon étincelle programme génère un souvenir d'exception dans ce cas. Est-il un moyen de gérer cela?
Je ne suis pas au courant de tout changement concernant ce que je vais dire "oui, cette propriété est toujours valable". Quant à votre deuxième question, il est un peu large pour répondre à un commentaire, je vous suggère de vous poser une nouvelle question sur ce souci avec plus de détails. (Que pensez-vous @zero323 ?)
OriginalL'auteur eliasah