hive中的优化问题
一、fetch抓取
fetch 抓取是指,hive中对某些情况的查询可以不必使用MapReduce计算。
(1)把hive.fetch.task.conversion 设置成none,然后执行查询语句,都会执行mapreduce程序。
hive(default)>set hive.fetch.task.conversion=none;
(2) 把hive.fetch.task.conversion 设置成more,然后执行查询语句。
二、本地模式
用户可以通过设置 hive.exec.mode.local.auto的值为true,来让Hive在适当的时候自动启动这个优化。
set hive.exec.mode.local.auto=true; //开启本地 mr
//设置 local mr 的最大输入数据量,当输入数据量小于这个值时采用 local mr 的方式, 默认为 134217728,即 128M
set hive.exec.mode.local.auto.inputbytes.max=50000000;
//设置 local mr 的最大输入文件个数,当输入文件个数小于这个值时采用 local mr 的方式, 默认为 4
set hive.exec.mode.local.auto.input.files.max=10;
(1) 开启本地模式,并执行查询语句
hive(default)>set hive.exec.mode/local.auto=true;
hive (default)> select * from emp cluster by deptno;
Time taken:1.328seconds,Fetched:14 row(s)
三、表的优化
小表,大表Join
(1)小表,大表Join 将key相对分散,并且数据量小的表放在join的左边,这样可以有效减少内存溢出错误发生的几率;再进一步,可以使用Group让小的维度表(1000条以下的记录条数)先进内存。在map端完成reduce.
(2) 大表 Join 大表 空key过滤
有时join超时是因为某些key对应的数据太多,而相同key对应的数据都会发送到相同的reducer上,从而大宋中内存不够。此时需要分析异常的key,很多情况下,这些key我们需要在SQL语句中进过滤
(3)MapJoin
如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将join操作转换成Common Join,即:在Reduce阶段完成join。容易发生数据倾斜。可以用Map Join把小表全部加载到内存在map端进行join,避免reducer处理。
1、设置自动选择MapJoin
set hive.auto.convert.join=true;默认为true
(4) Group by
1.开启Map端进行聚合,默认为True
hive.map.agger=true
2.在Map端进行聚合操作的条目数目
hive.groupby.mapagger.checkinterval=100000
3.有数据倾斜的时候进行负载均衡(默认是false)
hive.groupby.skewindata=true
当选项设定为true,生成的查询计划会有两个 MR Job。第一个 MR Job中,Map的输出结果会随机分布到Reducce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果是相同的Group By Key 有可能被分发到不同的Reduce中,从而达到负载均衡的目的;第二个MR Job再根据预处理的数据结果按照Group By Key分布到Reduce中(这个过程可以保证相同的Group By Key 被分布到同一个Reduce中),最后完成最终的聚合操作。
(5)Count (Distinct)去重统计
(6)笛卡尔积
尽量避免笛卡尔积,join的时候不加on 条件,或者无效的on 条件,Hive只能使用1个reducer 来完成笛卡尔积。
(7)行列过滤
(8)动态分区调整
(9)分桶
(10)分区
(11)合理设置Map数
(12)小文件进行合并
在map执行前合并小文件,减少map 数:CombineHiveInoutFormat具有对小文件进行合并的功能(系统默认的格式)。HiveInputFormat没有对小文件合并功能。
(13)复杂文件增加Map数
(14)合理设置REduce数
(15)并行执行
(16)严格模式
set hive.mapred.mode=strict
(17)JVM 重用
(18)压缩
(19)执行计划
hive中的优化问题的更多相关文章
- hive中笛卡尔积的优化
由于一个业务,必须要进行笛卡尔积,但是速度太慢了,left join时左表大概4万条数据,右表大概 3000多条数据,这样大概就是一亿多条数据, 这在大数据领域其实不算很大的数据量,但是hive中跑的 ...
- hive中rcfile格式(收藏文)
首先声明,此文是属于纯粹收藏文,感觉讲的很不错. 本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在MapReduce环境下的大规模数据分析中扮 ...
- 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...
- HDP Hive StorageHandler 下推优化的坑
关键词:hdp , hive , StorageHandler 了解Hive StorageHandler的同学都知道,StorageHandler作为Hive适配不同存储的拓展类,同时肩负着Hive ...
- Hive中常用的参数配置
-- 查看当前环境参数配置set -v;-- 重置配置为默认值reset; -- 调整map数-- input的文件大小,集群设置的文件块大小,hive中通过set dfs.block.size;命令 ...
- 061 hive中的三种join与数据倾斜
一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...
- 漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)
本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理.设计.以及在我们大数据场景下的实现方式. 全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近 ...
- Hive中Join的类型和用法
关键字:Hive Join.Hive LEFT|RIGTH|FULL OUTER JOIN.Hive LEFT SEMI JOIN.Hive Cross Join Hive中除了支持和传统数据库中一样 ...
- Hive中的数据倾斜
Hive中的数据倾斜 hive 1. 什么是数据倾斜 mapreduce中,相同key的value都给一个reduce,如果个别key的数据过多,而其他key的较少,就会出现数据倾斜.通俗的说,就是我 ...
随机推荐
- 正则工具类 -- RegexUtils
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util. ...
- MySQL数据库------常用函数
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. [1]ABS(x) 返回x的绝对值 例子:SELECT ABS(-1) -- 返回1 [2]CEIL(x),CEILING( ...
- CQRS轻量级框架【CQRSlite】学习使用小记
前言 这几天在研究DDD和CQRS.快把我绕晕了.发现国外的好文质量还是挺高的.之所以先体验CQRSlite这个小框架,是因为看了一位大神写的文章:https://www.codeproject.co ...
- 学会WCF之试错法——客户端调用基础
1当客户端调用未返回结果时,服务不可用(网络连接中断,服务关闭,服务崩溃等) 客户端抛出异常 异常类型:CommunicationException InnerException: Message: ...
- 全局ajax的使用
一.ajax介绍 详细介绍请看:http://www.runoob.com/ajax/ajax-tutorial.html AJAX = Asynchronous JavaScript and XML ...
- sqlserver事务怎么开启 怎么提交 怎么回滚
1.自动transaction每句statement都是一个transaction.例一个update指令更新多笔纪录, 要就全部成功, 只要失败,全部会回复原值. 2.ExplicitTransac ...
- 十九、详述 IntelliJ IDEA 之 添加 jar 包
以JDBC-MySQL驱动包为例 1.在IntelliJ IDEA中打开要添加jar包的Project 2.File – Project Structure如下图 3.选择Moudules – 再选择 ...
- 小修改,让mvc的验证锦上添点花
首先,mvc的客户端验证用的是jquery.validate.js, jquery.validate本身已经提供了很好的扩展功能,通过简单点配置就可以做得更好看些. 而Microsoft通过jquer ...
- M4修改外部晶振8M和25M晶振的方法
共计修改三个参数: 1.HSE_VALUE 具体位置在stm32f4xx.h中 2.PLL_M 具体位置在system_stm32f4xx.c中 3.Keil编译器 工程的Opt ...
- 启动tomcat的时候为啥你启动的是8,启动起来的确实其他的Tomcat
如果发现,是启动tomcat的时候为啥你启动的是8,启动起来的确实其他的Tomcat ,你可以去看看你的环境变量,是不是配了一个tomcat,