Hadoop Hive如何为作业选择减速器的数量?

Hadoop Hive如何为作业选择减速器的数量?,hadoop,hive,Hadoop,Hive,有几个地方说Hadoop作业中还原器的默认值为1。可以使用mapred.reduce.tasks符号手动设置还原器的数量 当我在AmazonEMR、AMI2.3.3上运行一个配置单元作业时,它有一些比一个大的还原器。查看作业设置,我猜mapred.reduce.tasks已设置为配置单元。它如何选择这个数字 注意:以下是运行配置单元作业时的一些消息,这些消息应该是一个线索: ... Number of reduce tasks not specified. Estimated from inpu

有几个地方说Hadoop作业中还原器的默认值为1。可以使用mapred.reduce.tasks符号手动设置还原器的数量

当我在AmazonEMR、AMI2.3.3上运行一个配置单元作业时,它有一些比一个大的还原器。查看作业设置,我猜mapred.reduce.tasks已设置为配置单元。它如何选择这个数字

注意:以下是运行配置单元作业时的一些消息,这些消息应该是一个线索:

...
Number of reduce tasks not specified. Estimated from input data size: 500
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapred.reduce.tasks=<number>
...

对于普通Hadoop安装,默认值为1。蜂巢覆盖了它

在开源hive和EMR中

# reducers = (# bytes of input to mappers)
             / (hive.exec.reducers.bytes.per.reducer)
表示默认的hive.exec.reducers.bytes.per.reducer为1G

您可以使用hive.exec.reducers.max限制此启发式生成的还原器的数量

如果您确切知道所需的还原器数量,可以设置mapred.reduce.tasks,这将覆盖所有启发式。默认情况下,该值设置为-1,表示配置单元应使用其试探法


在某些情况下,例如“从T中选择计数1”-Hive会将还原数设置为1,而与输入数据的大小无关。这些被称为“完全聚合”——如果查询所做的唯一事情是完全聚合——那么编译器知道来自映射器的数据将被减少到微不足道的数量,并且没有必要运行多个缩减器。

问得好。具体来说,hive何时选择执行编译时确定的reduce任务数,何时选择执行根据输入数据大小估计的reduce任务?在下面的回答中补充说,尽管完整的聚合将显著减少输出数据量,但更多的reducer有助于减少运行时间。我们面临着一个问题,蜂巢有1100多个映射器,只有一个减速器。完成排序需要几个小时。链接不再有效。发布Apache链接很好。