我有一张表,里面有像100tb这样的大数据。
当我查询表时,我在特定列(比如x)上使用了distributed by子句。
该表包含200个不同或唯一的x值。
因此,当我查询x上带有distributed by子句的表时,最大减速机应该是200。但我看到它是利用最大减速机,即999
让我举例说明
假设emp\ u表的描述是带有3列的fallows。
1.员工姓名
2员工id
3.组id
and Group_ID has**200 distinct**values
现在我想查询表
从按组id分发的emp表中选择*;
根据distributed子句,这个查询应该使用200个reducer。但我看到999减速机得到利用。
我是作为优化的一部分来做的。那么,我如何确保它应该使用200个减速器呢?
2条答案
按热度按时间wr98u20j1#
配置单元的reduce数量取决于输入文件的大小。但是如果Map器的输出只包含200个组,那么我猜reduce作业的大部分都不会收到任何内容。
如果你真的想控制减数。
set mapred.reduce.tasks
会有帮助的。xnifntxz2#
Hive中减速器的数量由两个属性之一决定。
hive.exec.reducers.bytes.per.reducer-默认值为1gb,这使得hive为每1gb的输入表大小创建一个reducer。
mapred.reduce.tasks-取一个intger值,那么多的reducer将为作业做好准备。
distribute by子句在决定还原数方面没有任何作用,它的全部工作是根据子句中给定的列将Map器中的键值分配/划分到准备好的还原器中。
考虑将mapred.reduce.tasks设置为200,distributed by将负责以均匀的方式将键值划分到200个reducer中。