如果归约器的配置单元数量与键的数量不同,会发生什么情况?

ffdz8vbo  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(302)

在hive中,我经常执行以下查询:

select columnA, sum(columnB) from ... group by ...

我读了一些mapreduce示例,一个reduce只能生成一个键。似乎减速机的数量完全取决于列中键的数量。
所以,为什么Hive可以手动设置减速机的数量?
如果列A中有10个不同的值,我将还原数设置为2,会发生什么?每个减速器将重复使用5次?
如果列A中有10个不同的值,并且我将还原数设置为20,会发生什么?Hive只能产生10个减速器?

qaxu7uf2

qaxu7uf21#

通常不应手动设置减速器的确切数量。使用 bytes.per.reducer 取而代之的是:

--The number of reduce tasks determined at compile time
--Default size is 1G, so if the input size estimated is 10G then 10 reducers will be used
set hive.exec.reducers.bytes.per.reducer=67108864;

如果要限制作业缩减器使用群集,可以设置以下属性: hive.exec.reducers.max 如果您在tez上运行,那么在执行时hive可以动态地设置reducer的数量,如果设置了以下属性:

set hive.tez.auto.reducer.parallelism = true;

在这种情况下,最初启动的减速器数量可能会更大,因为它是根据大小估计的,在运行时可以删除额外的减速器。
一个reducer可以处理多个键,这取决于数据大小和字节数。每个reducer和reducer限制配置设置。在类似于您的示例的查询中,相同的键将传递给同一个reducer,因为每个reducer容器都是独立运行的,所有具有特定键的行都需要传递给单个reducer才能计算该键的计数。
可以强制使用额外的减速器( mapreduce.job.reducers=N )或者根据错误的估计(因为过时的统计数据)自动启动,如果在运行时不删除,它们将什么也不做,并且很快完成,因为没有什么要处理的。但无论如何,这样的减缩器都会被调度和分配容器,所以最好不要强制使用额外的减缩器,并保持最新的统计信息以便更好地估计。

相关问题