有几个地方说Hadoop作业中默认的减少器数是1.您可以使用mapred.reduce.tasks符号手动设置减速器的数量.
当我运行Hive作业时(在Amazon EMR,AMI 2.3.3上),它有一些大于1的减速器.看看工作设置,有些东西已经设置了mapred.reduce.tasks,我认为是Hive.它如何选择这个数字?
注意:这是运行Hive作业时的一些消息,应该是一个线索:
...
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>
...
Run Code Online (Sandbox Code Playgroud)
小智 17
对于vanilla Hadoop安装,默认值为1.Hive覆盖它.
在开源蜂巢(和可能的EMR)
# reducers = (# bytes of input to mappers)
/ (hive.exec.reducers.bytes.per.reducer)
Run Code Online (Sandbox Code Playgroud)
这篇文章说默认hive.exec.reducers.bytes.per.reducer是1G.
您可以使用此启发式限制生成的Reducer数量hive.exec.reducers.max.
如果您确切知道所需的减速器数量,则可以进行设置mapred.reduce.tasks,这将覆盖所有启发式算法.(默认情况下,此值设置为-1,表示Hive应使用其启发式.)
在某些情况下 - 比如'从T'选择计数(1) - Hive会将减速器的数量设置为1,而不管输入数据的大小.这些被称为"完全聚合" - 如果查询所做的唯一事情是完全聚合 - 那么编译器就知道来自映射器的数据将减少到微不足道的数量,并且没有必要运行多个reducers.
| 归档时间: |
|
| 查看次数: |
19617 次 |
| 最近记录: |