Je suis en train d'implémenter une fonctionnalité de jointure à gauche en utilisant map reduce. Le côté gauche compte environ 600 millions de disques et le côté droit compte environ 23 millions de disques. Dans le mappeur, je crée les clés en utilisant les colonnes utilisées dans la condition de jointure gauche et en transmettant la sortie de valeur-clé du mappeur au réducteur. Je rencontre un problème de performances en raison du peu de clés de mappage pour lesquelles le nombre de valeurs dans les deux tables est élevé (par exemple, 456789 et 78960 respectivement). Même si d'autres réducteurs finissent leur travail, ces réducteurs continuent à fonctionner pendant plus longtemps. Est-il possible que plusieurs réducteurs puissent fonctionner sur la même sortie de valeur-clé à partir de mapper en parallèle pour améliorer les performances?Exécuter plusieurs réducteurs sur une sortie unique à partir du mappeur
Il s'agit de la requête Hive que je souhaite optimiser.
select distinct
a.sequence,
a.fr_nbr,
b.to_nbr,
a.fr_radius,
a.fr_zip,
a.latitude as fr_latitude,
a.longitude as fr_longitude,
a.to_zip,
b.latitude as to_latitude,
b.longitude as to_longitude,
((2 * asin(sqrt(cos(radians(a.latitude)) * cos(radians(b.latitude)) * pow(sin(radians((a.longitude - b.longitude)/2)), 2) + pow(sin(radians((a.latitude - b.latitude)/2)), 2)))) * 6371 * 0.621371) as distance,
a.load_year,
a.load_month
from common.sb_p1 a LEFT JOIN common.sb__temp0u b
on a.to_zip=b.zip
and a.load_year=b.load_year
and a.load_month=b.load_month
where b.correction = 0
and a.fr_nbr <> b.to_nbr
and ((2 * asin(sqrt(cos(radians(a.latitude)) * cos(radians(b.latitude)) * pow(sin(radians((a.longitude - b.longitude)/2)), 2) + pow(sin(radians((a.latitude - b.latitude)/2)), 2)))) * 6371 * 0.621371 <= a.fr_radius)
Toute autre solution sera également appréciée.
Quel type de se joindre à vous faites? Côté carte (répliqué) ou côté réduit (répartition)? – Nicomak
Si vous connaissez vos clés, vous pouvez écrire une partition personnalisée pour de meilleures performances. Exp: Si key.value <78960 .... autre .... https://www.tutorialspoint.com/map_reduce/map_reduce_partitioner.htm – pckmn
@Nicomak J'utilise réduire la jointure latérale. –