Hive版本: hive-1.1.0-cdh5.14.2

概述

如果表关联时,有一张表很小,那么可以在大表通过mapper时将小表完全加载到内存中,Hive可以在map端完成关联过程,这就是所谓的map-side JOIN。
使用map-side JOIN可以省掉常规的reduce过程,从而提升Hive的效率。
Hive中有三个和map-side JOIN相关的参数:

参数 默认值
hive.auto.convert.join true (Hive 0.11.0+)
hive.auto.convert.join.noconditionaltask true
hive.auto.convert.join.noconditionaltask.size 10000000(10M)

如果想使用map-side JOIN,重点关注hive.auto.convert.join.noconditionaltask.size就可以了,可以认为如果小表的大小超过此参数的值(默认10M),Hive就不会自动优化为map-side JOIN。但可以根据节点的实际内存大小,合理调整此参数值。
Hive官方文档对参数有如下解释:

注意:

由于map-side JOIN只能流化一个表到内存,而全外连接( Full Outer join)需要关联后两张表的数据,所以暂不能使用此优化。

测试

下面是对hive.auto.convert.join.noconditionaltask.size的简单测试:
测试环境中有两张表youtubevideo_orc(132.42M),youtubevideo_user_orc(17.33M)

1. hive.auto.convert.join.noconditionaltask.size不做调整

因以上二表的任一个都大于此参数的默认值(10M),所以Hive会执行reduce-side JOIN,而非map-side JOIN

0: jdbc:hive2://node03:10000> explain select t1.uploader,t2.friends from youtubevideo_orc t1
. . . . . . . . . . . . . . > join youtubevideo_user_orc t2 on t1.uploader = t2.uploader
. . . . . . . . . . . . . . > limit 10;

在执行计划中可以看出,Hive依然执行了reduce过程:

2. hive.auto.convert.join.noconditionaltask.size调整为20M

因youtubevideo_user_orc(17.33M),符合小于hive.auto.convert.join.noconditionaltask.size的值,所以Hive会自动调整为map-side JOIN。

0: jdbc:hive2://node03:10000> set hive.auto.convert.join.noconditionaltask.size = 20000000;
No rows affected (0.005 seconds)
0: jdbc:hive2://node03:10000> explain select t1.uploader,t2.friends from youtubevideo_orc t1
. . . . . . . . . . . . . . > join youtubevideo_user_orc t2 on t1.uploader = t2.uploader
. . . . . . . . . . . . . . > limit 10;

在执行计划中可以看出,Hive只执行map,而没有reduce过程(非重要部分已在截图中省略):

3. Full Outer Join不会使用map-side JOIN

关联方式改为Full Outer Join后,即使hive.auto.convert.join.noconditionaltask.size调整为20M,Hive依然使用reduce-side JOIN,而非map-side JOIN。

0: jdbc:hive2://node03:10000> set hive.auto.convert.join.noconditionaltask.size = 20000000;
0: jdbc:hive2://node03:10000> explain select t1.uploader,t2.friends from youtubevideo_orc t1
. . . . . . . . . . . . . . > full outer join youtubevideo_user_orc t2 on t1.uploader = t2.uploader
. . . . . . . . . . . . . . > limit 10;

总结

map-side JOIN可以省掉reduce过程,从而提高Hive效率;
Hive 0.11.0版本后,默认开启自动map-side JOIN优化,我们需要合理调整hive.auto.convert.join.noconditionaltask.size参数值。

【Hive】性能调优 - map-side JOIN相关推荐

  1. 3万字史诗级 Hive 性能调优(建议收藏)

    前言 Hive 作为大数据领域常用的数据仓库组件,在平时设计和查询的时候要特别注意效率 .影响 Hive 效率的几乎从不是数据量过大,而是数据倾斜.数据冗余.Job或I/O过多.MapReduce 分 ...

  2. Hive性能调优实战 分享

    获取方式 链接:https://pan.baidu.com/s/1TmkWssL1K45af7GDrj2QWw 提取码:26uv 关注我的公众号[宝哥大数据],更多干货 目录 第1章 举例感受Hive ...

  3. hive性能调优实战pdf_Nginx 性能调优实战

    来自:Linux社区 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpui ...

  4. hive性能调优实战pdf_1分钟带你入门JVM性能调优,实战解析调优工具

    JVM的运行参数 1.1 三种参数类型 标准参数 help -version -X参数 (非标准参数) -Xint -Xcomp -XX参数(使用率比较高, 常用语jvm调优) -XX:newSize ...

  5. 真正让你明白Hive参数调优系列1:控制map个数与性能调优参数

    本系列几章系统地介绍了开发中Hive常见的用户配置属性(有时称为参数,变量或选项),并说明了哪些版本引入了哪些属性,常见有哪些属性的使用,哪些属性可以进行Hive调优,以及如何使用的问题.以及日常Hi ...

  6. 【大数据开发】SparkSQL——Spark对接Hive、Row类、SparkSQL函数、UDF函数(用户自定义函数)、UDAF函数、性能调优、SparkSQL解决数据倾斜

    文章目录 一.Spark对接Hive准备工作 1.1 集群文件下载 1.2 导入依赖 1.3 打开集群metastore服务 二.Spark对接Hive 2.1 查询Hive 2.2 读取MySQL中 ...

  7. Apache Spark Jobs 性能调优(一)

    Apache Spark Jobs 性能调优(一) Spark 是如何执行程序的 选择正确的 Operator 什么时候不发生 Shuffle 什么情况下 Shuffle 越多越好 二次排序 结论 当 ...

  8. 大数据培训:Spark性能调优与参数配置

    Spark性能调优-基础篇 众所周知,正确的参数配置对提升Spark的使用效率具有极大助力,帮助相关数据开发.分析人员更高效地使用Spark进行离线批处理和SQL报表分析等作业. 推荐参数配置模板如下 ...

  9. 大数据技术之_19_Spark学习_07_Spark 性能调优 + 数据倾斜调优 + 运行资源调优 + 程序开发调优 + Shuffle 调优 + GC 调优 + Spark 企业应用案例

    大数据技术之_19_Spark学习_07 第1章 Spark 性能优化 1.1 调优基本原则 1.1.1 基本概念和原则 1.1.2 性能监控方式 1.1.3 调优要点 1.2 数据倾斜优化 1.2. ...

  10. Hive SQL调优

    1.背景 目前数据存在的问题 1.用户使用场景集中在上班高峰时间 2.SQL质量需要调整/调优 2.目标 总结通用的SQL优化方式进行推广 3.优化方式 目前hive版本2.3.5,执行引擎是Tez ...

最新文章

  1. 如何制作自己的CocoaPod库
  2. 物种丰度排序堆积柱形图及处理间各物种差异分析
  3. 【网络基础】Mime Type
  4. Creating a Jabber Client using the agsXMPP Library
  5. 直正的互联网产品设计:七个作为产品经理实际上很重要的”小事“
  6. 想换工作?阿里技术战略部招人啦!
  7. java获取map大小_java – 从HashMap获取最大Set大小
  8. TabControl控件用法图解
  9. DELL 控制卡做raid
  10. oracle时间间隔分钟数,如何掌握Oracle 中的时间间隔型数据
  11. CocosCreator2.3.1按钮节点防止多次连续点击
  12. 根据单头价格清单(核价单),更新单身出货明细的单价
  13. 深度模型训练之learning rate
  14. mysql5.7优化
  15. 社交软件红包技术解密(十):手Q客户端针对2020年春节红包的技术实践
  16. ImageMagick将多张图片拼接成一张图片_今天才发现,微信按下“这个”按钮,能将手机里的照片拼接成长图...
  17. 堆晶结构_火成堆晶成因的超镁铁质岩
  18. 团队作业-Beta冲刺(周四)
  19. 微信小程中文特殊字符编码与解码
  20. (24) T-GCN-时间图卷积网络用于交通预测

热门文章

  1. java 同步原语_你所不知道的有关Java 和Scala中的同步问题
  2. Cocos2dx 之 ButtonSprite
  3. C#利用WCF改进文件流传输的三种方式
  4. ubuntu使用python opencv_Ubuntu中“利用Opencv + python进行特征匹配”的环境搭建
  5. explain分析sql效果
  6. Codepen 每日精选(2018-3-29)
  7. Kakao Talk母公司第四季净利润暴跌80%
  8. 怎么理解Condition
  9. Unix环境高级编程笔记:12、高级IO
  10. 讲解开源项目:让你成为灵魂画手的 JS 引擎:Zdog