Hive总是给出“编译时确定的减少任务数量:1”,无论我做什么

时间:2013-04-25 15:05:54

标签: hadoop hive

create external table if not exists my_table
(customer_id STRING,ip_id STRING)
location 'ip_b_class';

然后:

hive> set mapred.reduce.tasks=50;
hive> select count(distinct customer_id) from my_table;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1

那里有160GB,有1个减速器需要很长时间......

[ihadanny@lvshdc2en0011 ~]$ hdu 
Found 8 items
162808042208   hdfs://horton/ip_b_class

...

2 个答案:

答案 0 :(得分:2)

从逻辑上讲,这里不能有多个reducer。除非来自各个地图任务的所有不同客户ID到达一个地方,否则无法建立清晰度并且无法生成单个计数。换句话说,除非您将所有客户ID集中在一个地方,否则您不能说每个客户ID都是不同的,并最终将它们计算在内。

答案 1 :(得分:1)

@Rags提供的原始答案和解释是正确的。附加的链接通过重写您的查询为您提供了良好的解决方法。我建议如果您不想重写查询,请使用此选项为reducer提供更多内存:

set mapreduce.reduce.java.opts=-Xmx8000m

该选项将reducer使用的内存最大值设置为8 GB。如果你有更多,那么你可以在这里指定更高的价值。希望这有帮助