从映射器单输出运行多个减速(Run multiple reducers on single outp

2019-09-28 03:13发布

我在执行使用地图缩小左连接功能。 左侧有大约600万条记录和右侧具有约23万条记录。 在映射器我正在使用左手使用的列键连接条件和传递键值输出映射器减速。 我正因为很少映射器密钥其中两个表中值的数量都很高(如456789和78960分别)的性能问题。 即使其他减速器完成他们的工作,这些减速保持运行更长的时间。 有没有办法多个减速机可以并行在同一键值输出工作从映射器以更好的表现呢?

这是我想优化配置单元查询。

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)

的任何其它溶液也可以理解。

Answer 1:

拆分使用倾斜按键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
;

这些子查询将并行运行,歪斜键将不会被分配给单个减速



Answer 2:

您也可以考虑使用HiveQL这一点。 它几乎意味着像你上面提到的和需要的地图的复杂性护理减少执行一个情况。



文章来源: Run multiple reducers on single output from mapper