我有大量数据表,如100TB。
当我查询表时,我在特定列(比如x)上使用了分布式子句。
该表包含200个不同或唯一的X值。
所以当我在X上查询带有分布式子句的表时,最大减速器应该是200.但我看到它正在使用MAX减速器,即999
让我用例子解释
假设 emp_table 的描述与 3列一样休闲。
1.emp_name
2。 emp_ID
3.Group_ID
and Group_ID has **200 distinct** values
现在我想查询表
从由group_ID分发的emp_table中选择* ;
此查询应根据分布式子句使用200个Reducers。但是我看到999减速器被利用了。
我正在做部分优化。那么我怎样才能确保它应该使用200减速器?
那么有人可以帮助我吗?
答案 0 :(得分:0)
hive的减少数量取决于输入文件的大小。但是如果mapper的输出只包含200个组。那么我猜大多数reduce工作都不会得到任何结果。
如果你真的想控制减少数量。set mapred.reduce.tasks
会有所帮助。
答案 1 :(得分:0)
Hive中的Reducer数量由两个属性决定。
hive.exec.reducers.bytes.per.reducer - 默认值为1GB,这使得配置单元为每个1GB的输入表大小创建一个reducer。
mapred.reduce.tasks - 获取一个整数值,并为那份工作做好准备。
distribute by子句在决定reducer数量方面没有任何作用,它的所有工作都是根据子句中给出的列将键值从映射器分配/分区到准备好的reducer。
考虑将mapred.reduce.tasks设置为200,并且distribute by将负责以均匀的方式将键值分区为200个reducer。