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. Codeforces 671D. Roads in Yusland(树形DP+线段树)

    调了半天居然还能是线段树写错了,药丸 这题大概是类似一个树形DP的东西.设$dp[i]$为修完i这棵子树的最小代价,假设当前点为$x$,但是转移的时候我们不知道子节点到底有没有一条越过$x$的路.如果 ...

  2. [学习笔记]FHQ-Treap及其可持久化

    感觉范浩强真的巨 博主只刷了模板所以就讲基础 fhq-treap 又形象的称为非旋转treap 顾名思义 保留了treap的随机数堆的特点,并以此作为复杂度正确的条件 并且所有的实现不用旋转! 思路自 ...

  3. 【HEOI 2018】制胡窜

    转载请注明出处:http://www.cnblogs.com/TSHugh/p/8779709.html YJQ的题解把思路介绍得很明白,只不过有些细节说得还是太笼统了(不过正经的题解就应该这个样子吧 ...

  4. requests、BeautifulSoup、自动登陆示例

    requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...

  5. 初识python版本

    区别一: python2x:源码重复不规范. python3x:重新整理规范了源码. 区别二: python2x: 默认的编码方式ascii,显示中文需要首行添加:#  _*_ encoding: u ...

  6. 弄清楚CSS的匹配原理让你写出高效的CSS

    用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知道你是否也跟我一样?看1个简单的CSS: DIV#divBox p span.red{color:red;} 按习惯我们对这个CSS 的理解是 ...

  7. bzoj 1588 平衡树 splay

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 15446  Solved: 6076[Submit][Sta ...

  8. maven私服Nexus3.2的使用

    maven搭建私服的步骤: 分三步: 第一步:下载maven的安装包,然后配置好maven的环境变量. 第二步:将maven的私服Nexus安装好,修改maven的配置文件setting.xml问,在 ...

  9. 使用rabbitmq消息队列

    一.前言 在python中本身就是存在队列queue.一个是线程队列queue,另一个是进程multiprocessing中的队列Queue. 线程queue:只用于线程之间的数据交互 进程Queue ...

  10. [USACO14JAN]Recording the Moolympics

    题目描述 Being a fan of all cold-weather sports (especially those involving cows), Farmer John wants to ...