hive中的distributed by子句

dgiusagp  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(510)

我有一张表,里面有像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个减速器呢?

wr98u20j

wr98u20j1#

配置单元的reduce数量取决于输入文件的大小。但是如果Map器的输出只包含200个组,那么我猜reduce作业的大部分都不会收到任何内容。
如果你真的想控制减数。 set mapred.reduce.tasks 会有帮助的。

xnifntxz

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中。

相关问题