Hive性能优化【严格模式、join优化、Map-Side聚合、JVM重用】
一.严格模式
通过设置以下参数开启严格模式:
>set hive.mapred.mode=strict;【默认为nonstrict非严格模式】
查询限制:
1.对于分区表,必须添加where查询条件来对分区字段进行条件过滤。
2.order by语句必须包含limit输出限制。
3.限制执行笛卡尔积的查询。
二.Hive排序
1.order by:对于查询结果做全排序只允许有一个reduce处理,当数据量较大时,应慎用。严格模式下必须结合limit来使用。
2.sort by:对于单个reduce的数据进行排序。
3.distribute by:分区排序,经常和sort by结合使用。
4.cluster by:相当于sort by + distribute by【cluster by不能通过asc,desc的方法指定排序规则,可通过distribute by column sort by column asc|desc的方式】
三.Hive Join
1.join计算时,将小表放在join的左边。
2.map join,在Map端完成join,实现方式:
2.1sql方式,在sql语句中添加mapjoin标记【mapjoin hint】
语法:select /*+MAPJOIN(smallTable) */ smallTable.key,bigTable.value from smallTable JOIN btTable ON smallTable.key = bigTable.key;
2.2开启自动mapjoin,通过设置一下配置启动自动的mapjoin
set hive.auto.convert.join = true;【该参数为ture时,Hive自动对左边的表统计量,如果是小表就加入内存,即对小表用mapjoin】
相关参数配置:
>hive.mapjoin.smalltable.filesize;【大小表判断阈值,表的大小小于该值则为小表,加载到内存中】
>hive.ignore.mapjoin.hint;【默认值为true,是否忽略mapjoin hint即mapjoin标记】
>hive.auto.convert.join.noconditionaltask;【默认值为true,将普通的join转化为普通的mapjoin时,是否将多个mapjoin转化为一个mapjoin】
>hive.auto.convert.join.noconditionaltask.size;【将多个mapjoin转化为一个mapjoin时,列表的最大值】
四.Map-Side聚合
通过设置以下参数开启在map端的聚合:set hive.map.aggr=true;
相关参数配置:
>hive.groupby.mapaggr.checkinterval:map端group by执行聚合时处理的数据条数【默认100000】
>hive.map.aggr.hash.min.reduction:进行聚合的最小比例【预先对100000条数据做聚合,若聚合之后的数据量/100000的值大于该配置【默认0.5】则不聚合】
>hive.map.aggr.hash.percentmemeory:map端聚合使用的内存的最大值
>hive.map.aggr.hash.force.flush.memory.threshold:map端做聚合操作时hash表的最大可以容量,大于该值则会触发flush
>hive.groupby.skewindata:是否对groupby产生的数据倾斜做优化,默认为false
五.控制hive中map和reduce的数量
map数量相关参数:
>mapred.max.split.size:一个split的最大值,即每个map处理文件的最大值
>maprd.min.split.size.per.node:一个节点上split的最小值
>mapred.min.split.size.per.rack:一个机架上split的最小值
reduce数量相关参数:
>mapred.reduce.tasks:强制指定reduce任务的数量
>hive.exec.reducers.bytes.per.reducer:每个reduce任务处理的数据量
>hive.exec.reducers.max:每个任务最大的reduce数
六.JVM重用
适用场景:
1.小文件个数过多
2.task个数过多
通过执行:set mapred.job.reuse.jvm.num.tasks=n;来设置task插槽个数
缺点:
设置开启后,task插槽会一直占用资源,不论是否有task,直到所有的task即整个job执行完成后才会释放所有的task插槽资源!
Hive性能优化【严格模式、join优化、Map-Side聚合、JVM重用】的更多相关文章
- 061 hive中的三种join与数据倾斜
一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...
- hive的join优化
“国际大学生节”又称“世界大学生节”.“世界学生日”.“国际学生日”.1946年,世界各国学生代表于布拉格召开全世界学生大会,宣布把每年的11月17日定为“世界大学生节”,以加强全世界大学生的团结和友 ...
- Hive性能优化
1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先 ...
- Hive性能优化上的一些总结
https://blog.csdn.net/mrlevo520/article/details/76339075 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据 ...
- Hive性能优化(全面)
1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次 ...
- Hive Join优化
在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化: 1. 只支持等值连接 2. 底层会将写的HQL语句转换为MapRed ...
- Hive性能分析和优化方法
Hive性能分析和优化方法 http://wenku.baidu.com/link?url=LVrnj-mD0OB69-eUH-0b2LGzc2SN76hjLVsGfCdYjV8ogyyN-BSja5 ...
- Hive优化-大表join大表优化
Hive优化-大表join大表优化 5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个 ...
- Hive的压缩存储和简单优化
一.Hive的压缩和存储 1,MapReduce支持的压缩编码 压缩格式 工具 算法 文件扩展名 是否可切分 对应的编码/解码器 DEFLATE 无 DEFLATE .deflate 否 org.ap ...
随机推荐
- Openresty与Tengine
Tengine官方网站:http://tengine.taobao.org/index_cn.html OpenResty官方网站:http://openresty.org/ Openresty和Te ...
- Logstash配置以服务方式运行
Logstash官网最新版下载地址以及YUM源:https://www.elastic.co/cn/downloads/logstash Logstash最常见的运行方式即命令行运行 ./bin/lo ...
- ASP.NET Core中的运行状况检查
由卢克·莱瑟姆和格伦Condron ASP.NET Core提供了运行状况检查中间件和库,用于报告应用程序基础结构组件的运行状况. 运行状况检查由应用程序公开为HTTP终结点.可以为各种实时监视方案配 ...
- 面试突击(六)——JVM如何实现JAVA代码一次编写到处运行的?
声明:本文图片均来自网络,我只是进行了选择,利用一图胜千言的力量来帮助自己快速的回忆相关的知识点 JVM是 JAVA Virtual Machine 三个英文单词的首字母缩写,翻译成中文就是Java虚 ...
- visual studio制作代码片段
使用 Visual Studio 的代码片段功能,我们可以快速根据已有模板创建出大量常用的代码出来.ReSharper 已经自带了一份非常好用的代码片段工具,不过使用 ReSharper 创建出来的代 ...
- cisco 路由与ASA SSH 设置
转载于https://www.cnblogs.com/sun292393989/p/8980700.html 一 试验拓扑 二 Server配置 ①配置hostname和domain name 因为r ...
- Nginx 配置学习
官方文档 一.概述 Nginx的配置放在配置文件nginx.conf/etc/nginx/nginx.conf中,大概的结构如下: main # 全局配置 events { # nginx工作模式配置 ...
- [Go] 环境变量,模块化与基础语法
[环境变量] 安装完 go 之后,设置必要环境变量: export GOPATH=/home/wc/go-lab export GO111MODULE=on export GOPROXY=https: ...
- [转]System Verilog的概念以及与verilog的对比
原文地址: http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语 ...
- 浅谈Javascript 浅拷贝和深拷贝的理解
javascript中存储对象都是存地址的. 浅拷贝:浅拷贝是都指向同一块内存区块,浅拷贝共用同一内存地址,你改值我也变.如果拷贝的对象里面的值是一个对象或者数组,它就是浅拷贝,拷贝的知识引用地址. ...