2016-10-17 15 views
1

map reduceを使用して左結合機能を実装しています。左サイドには約6億レコード、右サイドには約2,300万レコードがあります。マッパーでは、左結合条件で使用される列を使用してキーを作成し、マッパーからの出力をレジューサーに渡しています。 両方のテーブルの値の数が多い(たとえば、それぞれ456789および78960など)マッパーキーが少ないため、パフォーマンスの問題が発生しています。他の減速機が仕事を終えても、この減速機は長い時間稼動し続けます。 パフォーマンスを向上させるために、複数のレデューサーがマッパーの同じキー値出力に並行して作業できる方法はありますか?マッパーの単一出力で複数のレデューサーを実行

これは、最適化したい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) 

他の解決策もあります。

+0

単一減速に配布されることはありません、あなたがやっている参加の何種類?マップ側(複製)または削減側(再分割)? – Nicomak

+0

キーがわかっている場合は、パフォーマンスを向上させるためにカスタムパーティションを作成できます。 Exp:If key.value <78960 ....その他.... https://www.tutorialspoint.com/map_reduce/map_reduce_partitioner.htm – pckmn

+0

@Nicomak私はサイドサイドジョインを使用しています。 –

答えて

0

また、これにHiveQLを使用することも考えられます。そのことは、あなたが上で述べたような状況のためにかなり意味を持ち、マップの複雑さを軽減して実装を減らします。 UNION ALLを使用して

+0

現在、私はHiveQLを使用しており、48時間から50時間かかることがあります。それは私がMap Reduceのカスタムプログラムで試してみたかった理由です。 –

1

分割スキューキー:これらのサブクエリは並列で実行されます

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 
; 

、歪んだキーが

関連する問題