gpt4 book ai didi

hadoop - Hive 如何为一个工作选择 reducer 的数量?

转载 作者:可可西里 更新时间:2023-11-01 14:09:25 24 4
gpt4 key购买 nike

有几个地方说 Hadoop 作业中默认的 reducer 数量是 1。您可以使用 mapred.reduce.tasks 符号手动设置 reducer 的数量。

当我运行 Hive 作业(在 Amazon EMR、AMI 2.3.3 上)时,它有一些大于 1 的 reducer 。查看工作设置,有些东西设置了 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>
...

最佳答案

默认值 1 可能适用于 vanilla Hadoop 安装。 Hive 覆盖它。

在开源 hive 中(可能还有 EMR)

# reducers = (# bytes of input to mappers)
/ (hive.exec.reducers.bytes.per.reducer)

This post说默认的 hive.exec.reducers.bytes.per.reducer 是 1G。

您可以使用 hive.exec.reducers.max 限制此试探法生成的 reducer 的数量。

如果您确切知道所需的 reducer 数量,则可以设置 mapred.reduce.tasks,这将覆盖所有启发式方法。 (默认设置为 -1,指示 Hive 应使用其启发式方法。)

在某些情况下 - 比如说“从 T 中选择 count(1)” - Hive 会将缩减器的数量设置为 1 ,而不管输入数据的大小。这些被称为“完整聚合”——如果查询唯一做的是完整聚合——那么编译器知道来自映射器的数据将被减少到微不足道的数量,并且运行多个缩减器是没有意义的。

关于hadoop - Hive 如何为一个工作选择 reducer 的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com