学习自 http://blog.csdn.net/xqy1522/article/details/6699740

1. Map Join 的使用场景:

  • 关联操作中有一张表非常小
  • 不等值的链接操作

2. 语法:

使用 hint 的方式指定join时使用mapjoin。

select   /*+ mapjoin(c)*/    -- hint
c.tag,b.yemaozi_pre
from
(select
row_number() over(partition by 1 order by yemaozi_pre) yemaozi_rank,
yemaozi_pre
from customer_purchase_time_pre
) b -- 大表
join
(select
count(buyer_nick) total_buyer,'yemaozi' as tag
from customer_purchase_time_pre
) c -- 小表,只有一行
where b.yemaozi_rank=round(c.total_buyer*0.9);

用时才发现了个细节:

/*+mapjoin( c ) */  这个语法里面的c  是join的小表的名字!

3. 原理:

 MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了reduce,运行的效率也会高很多。 

4. 分析:

  • 例子中的小表参与join,没使用map join时,会导致数据倾斜严重。某个reduce上落太多数据,reduce时内存会严重占用,甚至不足。
  • 不等连接时,reduce会进行笛卡儿积,效率很低。
  • 使用map join后  join操作会在map阶段完成。

如果join数据两大,加上如下参数避免内存溢出:

set mapreduce.reduce.shuffle.input.buffer.percent =0.6;
set mapreduce.reduce.shuffle.parallelcopies = 5;
 

最新文章

  1. 如何给FineReport设置自定义消息提醒工具
  2. 自动提交Git branch代码评审到Review Board系统
  3. Windows7 IE11 F12控制台DOC资源管理器报错的问题解决方法
  4. 【转】NVelocity模板引擎初学总结
  5. 关于java中Double类型的运算精度问题
  6. 完全卸载Oracle方法
  7. swift-03-数据类型转换
  8. Python的.py文件打包成exe可执行文件
  9. 为Dynamics 365写一个简单程序实现解决方案一键迁移
  10. linux目录的特点
  11. python3下调用系统massagebox对话框
  12. jquery 事件的触发与绑定
  13. docker部署pinpoint
  14. linux下使用命令修改IP地址
  15. Solidworks实例学习
  16. SpringMVC Shiro与filterChainDefinitions
  17. Godray
  18. elt区间分布
  19. 很全的Python 面试题 github
  20. 621. Task Scheduler CPU任务间隔分配器

热门文章

  1. varnish 的一个配置
  2. tween.js
  3. IntelliJ IDEA 编译maven项目以及运行测试前编译项目
  4. single-write-database-connection
  5. 为easyui datagrid 添加上下方向键移动
  6. Java 位运算(移位、位与、或、异或、非)
  7. lecture14-RBM的堆叠、修改以及DBN的决策学习和微调
  8. Package Control Installation
  9. 强迫症的福利——我的第一个VS插件,对using排序!
  10. 开源免费的HTML5游戏引擎——青瓷引擎(QICI Engine) 1.0正式版发布了!