gpt4 book ai didi

database - Hive 的 Bucket Map Join

转载 作者:可可西里 更新时间:2023-11-01 16:22:06 27 4
gpt4 key购买 nike

我有一个 Hadoop 集群,我使用 Hive 进行查询,我想连接两个大表,其中一个有小桶,从我读到的内容来看,如果我将两个表都存储在连接键上,那会帮助性能。

所以我的设置是:

  • 将连接键上的两个表分桶到相同数量的桶中,
  • 较小表的桶适合内存,
  • 设置 hive.optimize.bucketmapjoin = true;
  • 运行以下查询:
SELECT /*+ MAPJOIN(a) */
count(*)
FROM a JOIN B ON a.join_key = b.join_key;

问题1:以上设置是否足以触发bucket map join?

问题 2: 我对 bucket map join 的理解是它启动一个本地任务,为每个 bucket 创建哈希表,然后将哈希 bucket 上传到每个映射器。这种理解是否正确?

问题3:如果上面的理解是正确的,那么为什么Hive会在本地进行散列呢?为什么不上传raw bucket,然后在map task中做hash,从而实现并行处理,速度更快?

最佳答案

以上设置是否足以触发bucket map join?

回答:1)如果“总表/分区大小很大,不利于映射连接”,则进行桶映射连接。所需的设置是: 设置 hive.optimize.bucketmapjoin = true;

2) 如果“表/分区大小没有限制非常大,即表大小”,则进行 SortMerge 桶连接。所需的设置是: 设置 hive.optimize.bucketmapjoin = true; 设置 hive.optimize.bucketmapjoin.sortedmerge = true; 设置 hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;

我对 bucket map join 的理解是,它启动一个本地任务,为每个 bucket 创建哈希表,然后将哈希 bucket 上传到每个映射器。这种理解是否正确?

答案:在 Bucket map join 的情况下,1) hive 运行本地 map reduce join 来创建 HashTable 文件,2) 它压缩和归档文件并加载到分布式缓存(i- 大的哈希表文件会减慢分布式传播缓存。ii- 映射器正在等待来自分布式缓存的哈希表文件。 )3) 加载到 map Join 任务的映射器。

如果上述理解正确,那么为什么 Hive 在本地进行散列?为什么不上传raw bucket,然后在map task中做hash,从而实现并行处理,速度更快?

回答:如果文件很大,那么我们会遇到以下问题i- 大哈希表文件会减慢分布式的传播速度缓存。ii- 映射器正在等待来自分布式缓存的哈希表文件。

因此,执行以下步骤将提高性能:

1) hive 运行本地 map reduce join 来创建 HashTable 文件,2) 它压缩和归档文件并加载到分布式缓存
3) 加载到 map Join 任务的映射器。

这比映射连接或普通连接提供更好的性能。

关于database - Hive 的 Bucket Map Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12783908/

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