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. Unity3D手游开发日记(4) - 适合移动平台的热浪扭曲

    热浪扭曲效果的实现,分两部分,一是抓图,二是扭曲扰动.其中难点在于抓图的处理,网上的解决方案有两种,在移动平台都有很多问题,只好自己实现了一种新的方案,效果还不错. 网上方案1. 用GrabPass抓 ...

  2. HDU--2363

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363 分析:最短路+二分. #include<iostream> #include< ...

  3. jsp 的 4 种基本语法

    1.JSP 注释 2.JSP 声明 3.JSP 表达式 4.JSP 脚本 JSP 注释: 注释格式: <%-- 注释内容 --%> 需要注意的是,JSP 的注释不会输出到 HTML 中. ...

  4. jetBrains 插件开发第一课-- 在主菜单栏新增一个菜单

    环境搭建完了,接下来可以开始写代码了: 1.新建 plugin 项目 2.编辑 plugin.xml,修改一下里面的插件名那些信息,该文件的配置项可以看这里:plugin.xml 其中比较关键的有一个 ...

  5. duilib 修复padding属性导致其他控件自动计算宽高度错误的bug和导致自己宽高度错误的bug

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42950733          BUG 一:padding导致其他控件宽 ...

  6. 多重检验_LSD方法不准确性

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  7. 题解 UVA1184 【Air Raid】

    有向无环图(DAG)的最小路径覆盖的模板题. 定义:在一个有向图中,找出最少的路径,使得这些路径经过了所有的点. 由题意可得这是一个有向图,而路径不能相交,于是我们知道这是无向图的不相交最小路径覆盖问 ...

  8. 通过循环判断size()清理queue的问题

    今天犯了个二逼问题,我想清理一个queue里对象,用了以下方法: ;i<objQueue.size();++i) { T* p_obj = objQueue.front(); delete p_ ...

  9. CCD与CMOS的区别

    我们在购买相机或是摄像机时,都会看到使用CMOS镜头或是CCD镜头,那么CCD与CMOS是什么意思呢,CCD与CMOS的区别是什么?首先,让我们了解CCD与CMOS的意思. CCDCCD使用一种高感光 ...

  10. UVA 1390 Interconnect

    https://vjudge.net/problem/UVA-1390 题意: 给出n个点m条边的无向图, 每次随机加一条非自环的边,(加完后可出现重边), 添加每条边的概率是相等的 求使图连通的期望 ...