由HIVE中的子句分发

时间:2015-04-22 02:29:36

标签: hadoop optimization hive

我有大量数据表,如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减速器?

那么有人可以帮助我吗?

2 个答案:

答案 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。