首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置单元0.13分桶的映射联接

配置单元0.13分桶的映射联接
EN

Stack Overflow用户
提问于 2015-05-20 08:32:24
回答 1查看 247关注 0票数 3

历史上有没有人在Hive 13中成功地执行了一个分桶的map join?关于BMJ (http://www.openkb.info/2014/11/understanding-hive-joins-in-explain.html#.VVuZZpNVikohttps://cwiki.apache.org/confluence/download/attachments/27362054/Hive%2BSummit%2B2011-join.pdf)的文档有限。它们看起来很棒,但我不能让它们工作。

如果我理解正确,我必须使用以下参数启动我的命令:

代码语言:javascript
复制
SET hive.optimize.bucketmapjoin=true;

这将导致Hive自动将我的懒惰的、超级慢的、常规的旧的缩减连接转换为轻便(svelte even?)、快速完成的、分桶的映射连接。也许我这里遗漏了一些参数?

我的表都是正确存储的。它们都被分到1024个存储桶中(这是不是太多了?)小表的存储桶大小约为15MB,大表的平均存储桶大小约为10 an。

下面是我的命令:

代码语言:javascript
复制
SET hive.optimize.bucketmapjoin=true;

SELECT
   EV.advertiser_id,
   EV.pixel_id,
   RDB.segment_id
FROM 
   rakuten_segment_index2_bucketed_event_logs_ddp EV
   JOIN rakuten_sir_bucketed_rdb RDB
      ON EV.mm_uuid = RDB.mm_uuid
WHERE 
   EV.days = 90 AND RDB.days = 90;

此命令将导致缓慢而稳定的异径管连接。它运行得很好,但速度非常慢。

需要注意的一点是,这些表是分区的。我只对连接分区值(天)= 90的表感兴趣。这些表被分区的事实会破坏分桶的映射连接吗?

我还尝试使用/*+MAPJOIN(EV)*/显式地设置映射连接提示。这会强制使用普通的mapjoin,而不是分桶的mapjoin。Hive试图将整个小(Er)表加载到hashmap中,但很快就耗尽了内存。

EN

回答 1

Stack Overflow用户

发布于 2015-05-28 06:40:46

我最终能够让它工作起来。似乎和hive.mapjoin.bucket.cache.size有关。

尝试将其设置为比默认值更高的数字(我认为是10或100 )。我的工作运行良好,如下所示:

代码语言:javascript
复制
SET hive.optimize.bucketmapjoin=true;
set hive.exec.reducers.max = 30000;
set hive.mapjoin.bucket.cache.size=100000000;

SELECT /*+MAPJOIN(EV)*/
   EV.advertiser_id,
   EV.pixel_id,
   RDB.segment_id
FROM 
   tbl_a EV
   JOIN tbl_b RDB
      ON EV.mm_uuid = RDB.mm_uuid
WHERE 
   EV.days = 90 AND RDB.days = 90;

注意:mapjoin提示也是必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30338331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档