rank()hive中的20M记录

时间:2016-09-08 09:57:18

标签: hadoop hive

当我运行这个sql时,大约需要半个小时,这是不可接受的。 源表有20M记录。

每个rank()创建一个运行7分钟的mapreduce作业,其中所有数据都在一个reduce中。如何优化这个sql?这些排名mapreduce可以并行运行吗?

create table tmp.xxxx  as                                       
SELECT t.end_user_id,   
t.pm_net_amt,    
t.parnt_ordr_num,
rank() over(order by t.pm_net_amt) pm_net_amt_rank,
rank() over(order by t.parnt_ordr_num) parnt_ordr_num_rank, 
rank() over(order by t.cat_lvl3_num)  cat_lvl3_num_rank,
rank() over(order by t.discount_rate) discount_rate_rank 
from  bi_tmp.bbbbbb t; 

1 个答案:

答案 0 :(得分:0)

来自How to make hive run mapreduce jobs concurrently?

  

在hive-default.xml中,有一个名为" hive.exec.parallel"的属性。   这可以并行执行作业。默认值为   "假&#34 ;.您可以将其更改为" true"获得这种能力。您可以   使用另一个属性" hive.exec.parallel.thread.number"控制如何   最多的工作可以并行执行。

这可能导致每个等级并行运行,但我还没有测试过。