hive工作中的一些优化策略
- 对于分区表,必须添加where对于分区字段的过滤条件
- order by语句必须包含limit输出限制
- 限制执行笛卡尔积的查询
- order by:对于查询结果做全排序,只允许一个reduce处理(当数据量较大时,慎用。严格模式下,必须结合limit来使用)
- sort by:对于单个reduce的数据进行排序
- distribute by:分区排序,经常和sort by结合使用
- cluster by:相当于sort by+distribute by
- cluster by不能通过asc、desc的方式指定排序顺序,可通过distribute by column sort by column asc|desc的方式
- join计算时,将小表(驱动表)放在join的左边
- Map join:在map端完成join
- SQL方式:在sql语句中添加map join的标记(mapjoin hint)
- 语法:select /* MAPJOIN(b) */ a.key, a.value from a join b on a.key = b.key
自动的mapjion
- 通过以后配置启用自动的mapjion
- set hive.auto.convert.join = true (为true时,hive自动对左边的表统计量,如果时小表就加入内存,即对小表启动mapjion)
- hive.mapjion.smalltable.filesize 默认25M
- Hive.ignore.mapjion.hint 是否忽略maojoin hint的标
- 通过以后配置启用自动的mapjion
- SQL方式:在sql语句中添加map join的标记(mapjoin hint)
- 尽可能使用相同的连接键(转化为一个mr)
- 大表join大表 (不一定有用)
- 空key过滤:有时join超时是因为某些key对应的数据太多,而相同key对应的数据都会发送到相同的reducer上,从而导致内存不够。此时我们应该仔细分析这些异常的key,很多情况下,这些key对应的数据是异常数据,我们需要在SQL语句中进行过滤。
- 空key转换:有时虽然某个key为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在join的结果中,此时我们可以表a中key为空的字段赋一个随机的值,使得数据随机均匀地分不到不同的reducer上
- 通过设置参数开启map端的聚合:set hive.map.aggr=true
- hive.groupby.mapaggr.checkinterval —map端gourp by执行聚合时处理的多少行数据(默认100000)
- hive.map.aggr.hash.min.reduction —进行聚合的最小比例(预先对100000条数据做聚合,若聚合之后的数据量/100000的值大于配置的0.5,则不会聚合)
- hive.map.aggr.hash.percentmemory —map端聚合使用的内存最大值
- hive.map.aggr.hash.force.flush.memory.threshold —map端做聚合操作时hash表的最大可用内容,大于该值出发flush
- hive.groupby.skewindata — 是否对groupby产生的数据倾斜做优化。默认false,当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。
- 设置合并属性
- 是否合并map输出文件:hive.merge.mapfiles=true
- 是否合并reduce输出文件:hive.merge.mapredfiles=true
- 合并文件的大小:hive.merge.size.per.task=256*1000*1000
- Map数量相关的参数
- mapred.max.split.size 每个split的最大值,即每个map处理文件的最大值
- mapred.min.split.size.per.node 一个节点上split的最小值
- mapred.min.split.size.per.rack 一个机架上split的最小值
- reduce数量相关的参数
- mapred.reduce.tasks 强制指定reduce任务的数量
- hive.exec.reducers.bytes.per.reduce 每个reduce任务处理的数据量
- hive.exec.reduce.max 每个任务最大的reduce书
- 适用场景
- 小文件个数过多
- task个数过多
- 通过set mapred.job.reuse.jvm.num.tasks=n来设置
- 缺陷:设置开启之后,task插槽会一直占用资源,无论是否有task运行,直到所有的task即整个job全部执行完成时,才会释放所有的task插槽的资源
hive工作中的一些优化策略的更多相关文章
- 在 Android开发中,性能优化策略十分重要
在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...
- HBase工作中的一些优化方法
1.表的设计 Pre-creating Regions(预分区) 默认情况下,在创建Hbase表的时候会自动创建一个region分区,当导入数据的时候,所有的Hbase客户端都向这一个region写数 ...
- 大型系统中使用JMS优化技巧–Sun OpenMQ
我们先来看看在Sun OpenMQ系统中 一个持久.可靠的方式传送消息的步骤是怎么样的,如图所示: 查看大图请点击这里 在传送过程中,系统处理JMS消息分为以下两类: ■ 有效负荷消息,由生成方发 ...
- 【转载】大型系统中使用JMS优化技巧
[本文转自:http://www.javabloger.com/article/sun-openmq-jms-large-scale-systems.html] 我们先来看看在Sun OpenMQ系统 ...
- 【SQL系列】深入浅出数据仓库中SQL性能优化之Hive篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]深入浅出数据仓库中SQL性能优化之 ...
- Hive(六)hive执行过程实例分析与hive优化策略
一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...
- Hive整体优化策略
一 整体架构优化 现在hive的整体框架如下,计算引擎不仅仅支持Map/Reduce,并且还支持Tez.Spark等.根据不同的计算引擎又可以使用不同的资源调度和存储系统. 整体架构优化点: 1 根据 ...
- 工作中常见的hive语句总结
hive的启动: 1.启动hadoop2.开启 metastore 在开启 hiveserver2服务nohup hive --service metastore >> log.out 2 ...
- PHP中的数据库一、MySQL优化策略综述
前些天看到一篇文章说到PHP的瓶颈很多情况下不在PHP自身,而在于数据库.我们都知道,PHP开发中,数据的增删改查是核心.为了提升PHP的运行效率,程序员不光需要写出逻辑清晰,效率很高的代码,还要能对 ...
随机推荐
- python range 和xrange
对于这两个好像功能都差不多,这两个经常会被搞混,所以今天一定要把这个完全弄清楚. 首先我们看看range: range([start,] stop[, step]),根据start与stop指定的范围 ...
- shell中的字符串操作——字符串的切割
default.yaml {default_baseurl: 'http://10.113.10.68:8082'} test.sh a=`cat default.yaml` t=":&qu ...
- LCA的几种做法
P3379 LCA $ 1:$蜗牛爬式 void dfs(int u,int fa) { f[u]=fa;//预处理father for(int i=head[u]; i; i=e[i].nxt) i ...
- python发送钉钉机器人脚本
#!/usr/bin/python# -*- coding: utf-8 -*-import requestsimport jsonimport sysimport os headers = {'Co ...
- 【Beta】Scrum meeting 7
目录 写在前面 进度情况 任务进度表 Beta-1阶段燃尽图 遇到的困难 照片 commit截图记录 后端代码仓库 技术博客 写在前面 例会时间:5.11 22:30-22:50 例会地点:微信群语音 ...
- 第08组 Alpha冲刺(3/4)
队名 八组评分了吗 组长博客 小李的博客 作业博客 作业链接 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 11月19日了解各个小组的进度与难以攻破的地方,晚上安排开会,安排新的冲刺任 ...
- HTTP协议之multipart/form-data
HTTP协议之multipart/form-data REST API可以用multipart/form-data,来上传文件. 在最初的 http 协议中,没有上传文件方面的功能. rfc1867为 ...
- zookeeper生产最广泛使用java客户端curator介绍及其它客户端比较
关于zookeeper的原理解析,可以参见zookeeper核心原理详解,本文所述大多数实践基于对zookeeper原理的首先理解. Curator是Netflix公司开源的一个Zookeeper客户 ...
- vue重置表单数据
Object.assign(this.$data, this.$options.data()) // 全部重置 Object.assign(this.$data.form, this.$options ...
- row_number() over()分组排序功能 partition by 用于给结果集分组
select * from ( select row_number() over(partition by Gid order by Gid ASC) as RowN, * from( select ...