大数据集窗口优化配置单元查询性能

ni65a41a  于 2021-06-24  发布在  Hive
关注(0)|答案(0)|浏览(226)

我有这样一个数据集,一个用id标识的人,使用另一个id标识的对象,以及他使用这个对象的时间。我想知道这个人最常用的前20项。数据量非常大,超过1亿,每个id可以产生大约200个他可能使用的对象。
首先,我用cluster创建了一个投影表,并对Map器中发生的事情进行排序,这样所有的事情都会在节点中的一个位置上,这样Map器在分发时会在本地找到这些事情

CREATE TABLE person_objectid_dwell ( person string, objectid string, sum_dwell bigint)
CLUSTERED BY (person) SORTED BY (sum_dwell desc,objectid asc)INTO 100 BUCKETS STORED AS ORC;

完成后,我从feeder表中插入如下数据

insert into person_objectid_dwell  select person, objectid, sum_dwell from person_objectid_dwell distribute by person sort by sum_dwell desc, objectid asc;

然后使用窗口和表创建进行查询

create table person_top20_objectsdwell as select * from ( select person, objectid, sum_dwell, 
rank() over (partition by person order by sum_dwell  desc ) as rank
from person_objectid_dwell ) t where rank <21;

问题是我没有得到我认为我应该得到的性能,我设置了减速器的数量等。程序正在运行3000+Map器和1000+减速器和Map阶段是没有得到一点。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题