gpt4 book ai didi

performance - 为什么在 Hive 中 count(distinct) 比 group by 慢?

转载 作者:行者123 更新时间:2023-12-03 11:25:40 27 4
gpt4 key购买 nike

在 Hive 上,我相信 count(distinct) 比 group-by 更有可能导致 reducer 的工作量不平衡,最终导致一个悲伤的 reducer 磨掉。下面的示例查询。

为什么?

示例查询:

select count(distinct user)
from some_table

带有 group-by 的版本(建议更快):
select count(*) from
(select user
from some_table
group by user) q

注意: this presentation 的幻灯片 26描述了问题。

最佳答案

select count(distinct user)
from some_table;

此查询在 map 端进行计数。每个映射器发出一个值,即计数。然后必须聚合所有值以产生总计数,这就是单个 reducer 的工作。
select count(*) from
(select user
from some_table
group by user) q;

这个查询有两个阶段。在第 1 阶段,GROUP BY 聚合 map 端的用户并为每个用户发出一个值。输出必须在归约端聚合, 但它可以使用许多 reducer .在第 2 阶段, COUNT在 map 端执行,然后使用单个 reducer 聚合最终结果。

因此,如果您有大量的 map 侧拆分,那么第一个查询将不得不聚合大量的单值结果。第二个查询可以在阶段 1 的 reduce 端使用许多 reducer,然后,在阶段 2,最后将有一个较小的任务用于单独的 reducer。

这通常不是优化。您必须有大量的 map 拆分,查询 1 reducer 才会成为问题。第二个查询有两个阶段,仅此一个阶段就会比查询 1 慢(在阶段 1 完全完成之前,阶段 2 无法开始)。所以,虽然我可以看到你得到的建议的一些推理,但除非进行了适当的测量并显示出改进,否则我会持怀疑态度。

关于performance - 为什么在 Hive 中 count(distinct) 比 group by 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311193/

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