Hive 优化

1.核心思想:

把Hive SQL 当做Mapreduce程序去优化
以下SQL不会转为Mapreduce来执行
select仅查询本表字段
where仅对本表字段做条件过滤
 
Explain 显示执行计划
EXPLAIN [EXTENDED] query

2.Hive运行方式:

本地模式
集群模式
 

2.1开启本地模式:

set hive.exec.mode.local.auto=true;

2.2注意:

hive.exec.mode.local.auto.inputbytes.max  #默认值为128M
表示加载文件的最大值,若大于该配置仍会以集群方式来运行!

3.并行计算

通过设置以下参数开启并行模式:
set hive.exec.parallel=true;
注意:hive.exec.parallel.thread.number=xxxxx
(一次SQL计算中允许并行执行的job个数的最大值)

4.严格模式

4.1通过设置以下参数开启严格模式:

set hive.mapred.mode=strict;
(默认为:nonstrict非严格模式)

4.2查询限制:

1、对于分区表,必须添加where对于分区字段的条件过滤;
2、order by语句必须包含limit输出限制;
3、限制执行笛卡尔积的查询。

5.Hive排序

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 的方式)

6.Hive Join

Join计算时,将小表(驱动表)放在join的左边
Map Join:在Map端完成Join
两种实现方式:

SQL方式,在SQL语句中添加MapJoin标记(mapjoin hint)

语法:
SELECT  /*+ MAPJOIN(smallTable) */  smallTable.key,  bigTable.value
FROM smallTable JOIN bigTable ON smallTable.key = bigTable.key;

开启自动的MapJoin

通过修改以下配置启用自动的mapjoin:
set hive.auto.convert.join = true;
(该参数为true时,Hive自动对左边的表统计量,如果是小表就加入内存,即对小表使用Map join)
相关配置参数:

大表小表判断的阈值,如果表的大小小于该值则会被加载到内存中运行

hive.mapjoin.smalltable.filesize;   

默认值:true;是否忽略mapjoin hint 即mapjoin标记

hive.ignore.mapjoin.hint;

默认值:true;将普通的join转化为普通的mapjoin时,是否将多个mapjoin转化为一个mapjoin

hive.auto.convert.join.noconditionaltask;  

6.6将多个mapjoin转化为一个mapjoin时,其表的最大值

hive.auto.convert.join.noconditionaltask.size;    
 

7.Map-Side聚合

7.0通过设置以下参数开启在Map端的聚合:

set hive.map.aggr=true;
相关配置参数:

map端group by执行聚合时处理的多少行数据(默认:100000)

hive.groupby.mapaggr.checkinterval;

进行聚合的最小比例(预先对100000条数据做聚合,若聚合之后的数据量/100000的值大于该配置0.5,则不会聚合)

hive.map.aggr.hash.min.reduction:

map端聚合使用的内存的最大值

hive.map.aggr.hash.percentmemory:

map端做聚合操作是hash表的最大可用内容,大于该值则会触发flush

hive.map.aggr.hash.force.flush.memory.threshold:

是否对GroupBy产生的数据倾斜做优化,默认为false

hive.groupby.skewindata

8.控制Hive中Map以及Reduce的数量

8.1Map数量相关的参数

一个split的最大值,即每个map处理文件的最大值

mapred.max.split.size
 
一个节点上split的最小值
mapred.min.split.size.per.node
一个机架上split的最小值
mapred.min.split.size.per.rack

8.2Reduce数量相关的参数

强制指定reduce任务的数量
mapred.reduce.tasks
每个reduce任务处理的数据量
hive.exec.reducers.bytes.per.reducer
每个任务最大的reduce数
hive.exec.reducers.max

9.Hive - JVM重用

9.1适用场景:

1、小文件个数过多
2、task个数过多
通过下面参数来设置
set mapred.job.reuse.jvm.num.tasks=n; 
(n为task插槽个数)

9.2缺点:

设置开启之后,task插槽会一直占用资源,不论是否有task运行,直到所有的task即整个job全部执行完成时,才会释放所有的task插槽资源!

hive学习(八)hive优化的更多相关文章

  1. hive学习(二) hive操作

    hive   ddl 操作官方手册https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL hive  dml 操作官方手 ...

  2. hive学习(四) hive的函数

    1.内置运算符 1.1关系运算符 运算符 类型 说明 A = B 所有原始类型 如果A与B相等,返回TRUE,否则返回FALSE A == B 无 失败,因为无效的语法. SQL使用”=”,不使用”= ...

  3. hive学习(三) hive的分区

    1.Hive 分区partition 必须在表定义时指定对应的partition字段 a.单分区建表语句: create table day_table (id int, content string ...

  4. Hive学习笔记——Hive中的分桶

    对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记 ...

  5. Hive学习:Hive连接JOIN用例详解

    1 准备数据: 1.1 t_1 01 张三 02 李四 03 王五 04 马六 05 小七 06 二狗 1.2 t_2 01 11 03 33 04 44 06 66 07 77 08 88 1.3 ...

  6. Hive学习 系列博客

    原 Hive作业优化 原 Hive学习六:HIVE日志分析(用户画像) 原 Hive学习五--日志案例分析 原 Hive学习三 原 Hive学习二 原 Hive学习一 博客来源,https://blo ...

  7. hive学习

    大数据的仓库Hive学习  10期-崔晓光 2016-06-20  大数据   hadoop   10原文链接 我们接着之前学习的大数据来学习.之前说到了NoSql的HBase数据库以及Hadoop中 ...

  8. Hive学习路线图(转)

    Hadoophivehqlroadmap学习路线图   1 Comment Hive学习路线图 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig ...

  9. 【转】Hive学习路线图

    原文博客出自于:http://blog.fens.me/hadoop-hive-roadmap/ 感谢! Hive学习路线图 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Ha ...

  10. Hive学习路线图--张丹老师

    前言 Hive是Hadoop家族中一款数据仓库产品,Hive最大的特点就是提供了类SQL的语法,封装了底层的MapReduce过程,让有SQL基础的业务人员,也可以直接利用Hadoop进行大数据的操作 ...

随机推荐

  1. BZOJ3524 & LOJ2432:[POI2014]代理商Couriers——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3524 https://loj.ac/problem/2432 给一个长度为n的序列a.1≤a[i] ...

  2. 最小点权覆盖集&最大点权独立集

    最小点权覆盖集 二分图最小点权覆盖集解决的是这样一个问题: 在二分图中,对于每条边,两个端点至少选一个,求所选取的点最小权值和. 方法: 1.先对图二分染色,对于每条边两端点的颜色不同 2.然后建立源 ...

  3. NOIP2015Day1T3斗地主(DFS)

    这类题...真的写不动T T 首先可以发现没有顺子的话出牌次数是一定的, 换句话说只有顺子会影响出牌次数. 所以可以暴搜出所有顺子的方案, 搜完之后记忆化搜索求一下a张1张同色牌, b张2张同色牌,c ...

  4. Tornado----自定义异步非阻塞Web框架:Snow

    Python的Web框架中Tornado以异步非阻塞而闻名.本篇将使用200行代码完成一个微型异步非阻塞Web框架:Snow. 一.源码 本文基于非阻塞的Socket以及IO多路复用从而实现异步非阻塞 ...

  5. Linux之时间相关操作20170607

    一.Linux常用时间相关函数 -asctime,ctime,getttimeofday,gmtime,localtime,mktime,settimeofday,time asctime       ...

  6. iOS之富文本(一)

    NSAttributedString叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化. 通过以下代码即可实现上面 ...

  7. UVA-11582 数学

    UVA-11582 题意: 求f[a^b]%n ,其中f是斐波那契数列,1<=n<=1000,0<=a,b<=2^64; 代码: //这题重点是要发现 f[i]%n会出现循环, ...

  8. PlantUML类图

    PlantUML类图   雨客 2016-04-08 11:38:03 浏览796 评论0 摘要: 类之间的关系 PlantUML用下面的符号来表示类之间的关系: 泛化,Generalization: ...

  9. 基础知识:BT1120

    今天谈点我所理解的BT1120协议. BT1120是高清晰度电视 (HDTV) 演播室信号数字接口,首先说一下接口标准里面的概念,然后谈谈自己的理解,写这个文章的目的就是解释给自己听的,所以都是一些白 ...

  10. IBatisNet+Oracle.ManagedDataAccess打造无需安装oracle客户端和ODP即可连接oracle数据库

    库环境: Oracle.ManagedDataAccess 版本:4.122.1.0 IBatisNet  版本:1.6.2 其实很简单的,只需在驱动配置那里添加上Oracle.ManagedData ...