hive--Sort Merge Bucket Map Join


Bucket Map Join
 
1.テスト1:2つの1億余りの記録の表は、データの傾斜とデカルト積が存在せず、テストの下で普通のjoinと差が少ない.
 
2.テスト2:4000万と5000万以上のテーブルjoin、関連キーデータが傾き、デカルト積、効果が明らかである.
 
create table lxw_test(imei string,sndaid string,data_time string)
CLUSTERED BY(imei) SORTED BY(imei) INTO 10 BUCKETS;

create table lxw_test1(imei string,sndaid string,data_time string)
CLUSTERED BY(imei) SORTED BY(imei) INTO 5 BUCKETS;

 
2つのテーブルの関連キーはimeiで、imeiを押してバケツを分けてソートする必要があります.小さなテーブル(lxw_test)のバケツ数は大きなテーブル(lxw_test 1)の倍数です(これはネットで見たもので、このようにする必要があります.しばらくはそうします).
 
set hive.enforce.bucketing = true;
データを挿入する前に、このオプションを開く必要があります.
 
insert overwrite table lxw_test
select imei,sndaid,null  
from woa_all_user_info_his 
where pt = '2012-05-28' 
limit 40000000;


insert overwrite table lxw_test1
select imei,sndaid,data_time 
from woa_all_user_info_his 
where pt = '2012-05-28';

 
 
joinで開くパラメータ:
set hive.optimize.bucketmapjoin = true; set hive.optimize.bucketmapjoin.sortedmerge = true; set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;
 
select /*+ mapjoin(b) */ count(1) 
from lxw_test1 a 
join lxw_test b 
on a.imei = b.imei 

 
小さなテーブルを駆動テーブル、mapjoinとします.
Insertデータも含めて、10分ほど差がありません.
もしこの2つの時計が普通のjoinをしていたら、1時間以上かかり、走りきれず、killが落ちました.