Une jointure par shuffle repartitionne les deux côtés sur la clé de jointure à travers le réseau, pour que les clés correspondantes atterrissent sur le même executor, ce qui coûte cher. Une jointure par broadcast envoie la plus petite table en entier à chaque executor, si bien que le gros côté est joint localement, sans shuffle. Diffusez quand le petit côté tient confortablement en mémoire d'executor, réglez le seuil d'auto broadcast, et assurez-vous que les statistiques sont justes pour que le planificateur choisisse correctement.
Pourquoi les recruteurs posent cette question
La stratégie de jointure est là où se trouvent la plupart des gains de tuning Spark : les recruteurs s'en servent donc pour jauger si vous comprenez l'exécution distribuée ou si vous appelez juste l'API. Ils attendent la contrainte mémoire du broadcast, le rôle des statistiques de table dans les décisions du planificateur, et la conscience qu'un mauvais broadcast provoque des erreurs de mémoire sur le driver ou les executors.
Comment structurer votre réponse
- Décrivez le déplacement physique des données dans chaque stratégie.
- Énoncez la condition de taille qui rend le broadcast viable.
- Expliquez comment le planificateur décide et sur quelles statistiques il s'appuie.
- Donnez le mode de défaillance quand on diffuse quelque chose de trop gros.
- Mentionnez le bucketing comme moyen d'éviter les shuffles à répétition.
Exemple de réponse
Une jointure par shuffle déplace les deux jeux de données sur le réseau pour que les lignes de même clé finissent dans la même partition, ce qui veut dire sérialisation, débordement sur disque et beaucoup de trafic réseau. Une jointure par broadcast évite tout cela en expédiant la petite table à chaque executor et en faisant une jointure par hachage locale, si bien que la grosse table ne bouge jamais. Le planificateur choisit le broadcast automatiquement quand il croit qu'un côté est sous le seuil d'auto broadcast, par défaut autour de 10 Mo, et c'est le mot croit qui fait tout le travail. Si les statistiques sont périmées ou si la source est un scan de fichiers sans statistiques, il se trompera : je lance donc soit un ANALYZE, soit un hint de broadcast explicite. Le mode de défaillance vaut la peine d'être connu : diffuser une table qui fait en réalité deux gigaoctets la collecte via le driver et tue le job. Pour des jointures que nous répétions toutes les heures sur la même clé, bucketiser les tables sur cette clé a supprimé le shuffle définitivement.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Que se passe-t-il sur le driver pendant un broadcast ?
- Comment le bucketing évite-t-il un shuffle, et qu'est-ce que cela coûte ?
- Quand une sort merge join battrait-elle une hash join ?
Autres questions pour ingénieur data
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions