gpt4 book ai didi

hadoop - Hive 中的分桶未优化

转载 作者:可可西里 更新时间:2023-11-01 15:04:36 26 4
gpt4 key购买 nike

我有基于 flightnum 列的分桶表(10 个桶),数据大小约为 700MB,也强制分桶。

当我执行查询时:从 flight_buck 中选择 count(flightnum),其中 flightnum=10;在大约 46 秒内得到响应。映射器总数为 27。

在具有相同数据的非分桶表上执行相同的查询时:select count(flightnum) from flight_temp where flightnum=10;在大约 47 秒内得到响应。使用的映射器总数为 30。

为什么我会在同样的时间内收到回复?

最佳答案

Bucketing 有助于 join 更快,为了提高简单的 SELECT 速度,您必须使用分区表。尝试按 flightnum 对表进行分区,然后再次运行选择。

为什么会这样?

让我们像这样创建一个分桶的非分区表:

create table `t1b`( 
`exchange` string,
`stock_symbol` string,
`date` string,
`stock_price_open` float,
`stock_price_high` float,
`stock_price_low` float,
`stock_price_close` float,
`stock_volume` int,
`stock_price_adj_close` float)
clustered by ( `stock_symbol` ) sorted by ( `date` ) into 306 buckets;

让我们用数据填充它... reducer 的数量与 bucket 的数量一样多,因为每个 reducer 将只处理具有相同键的记录,并将使用您喜欢的排序将数据存储到其文件中,在本例中是按日期

enter image description here

让我们看看 HDFS...

请注意我们得到了什么.. 306 个文件(桶)...

enter image description here

并且在它们中的每一个里面都有具有相同聚类键的记录......

enter image description here

但是所有文件都在同一个文件夹中,当使用 hive 进行 SELECTing 时,无法了解哪些文件包含我们正在寻找的值,因此没有分区的存储不会加速选择,因为没有关于我们正在寻找的数据在哪里。

分桶有什么作用?当您连接数据时,整个桶可以加载到 RAM 中,我们可以在 MAP 中进行快速连接,而不是在 REDUCE 中进行慢速连接。

关于hadoop - Hive 中的分桶未优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39942979/

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