gpt4 book ai didi

hadoop - 在 mapper 的单个输出上运行多个 reducer

转载 作者:可可西里 更新时间:2023-11-01 15:28:01 25 4
gpt4 key购买 nike

我正在使用 map reduce 实现左连接功能。左侧有大约 6 亿条记录,右侧有大约 2300 万条记录。在映射器中,我使用左连接条件中使用的列制作键,并将键值输出从映射器传递到缩减器。我遇到了性能问题,因为两个表中的值数量都很高(例如分别为 456789 和 78960)的映射器键很少。即使其他 reducer 完成了它们的工作,这些 reducer 仍会继续运行更长时间。有没有什么方法可以让多个 reducer 并行处理 mapper 的相同键值输出以提高性能?

这是我要优化的 Hive 查询。

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)

任何其他解决方案也将不胜感激。

最佳答案

使用 UNION ALL 拆分倾斜键:

select * from table1 a left join table2 b on a.key=b.key
where a.key not in (456789,78960)
union all
select * from table1 a left join table2 b on a.key=b.key
where a.key = 456789
union all
select * from table1 a left join table2 b on a.key=b.key
where a.key = 78960
;

这些子查询将并行运行,倾斜键不会分布到单个 reducer

关于hadoop - 在 mapper 的单个输出上运行多个 reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40095103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com