1、简单的查询,就是只是select,不带count,sum,group by这样的,都不走map/reduce,直接读取hdfs文件进行filter过滤,即尽量让fetch task(当开启一个Fetch Task功能,就执行一个简单的查询语句不会生成MapRreduce作业,而是直接使用FetchTask,从hdfs文件系统中进行查询输出数据,从而提高效率)任务不走MapReduce。

2、遵循hive的严格模式,禁止以下3种情况的查询模式

(1)当表为分区表时,where子句后无分区字段和限制字段禁止执行

(2)使用order by子句时,必须使用limit语句,因为order by子句只会产生一个reducer任务

(3)限制笛卡尔乘积的查询,尽量将限制条件放在from语句后面的on后面。因为在关系型数据库执行 from join查询的时候不使用on语句而是使用where语句,关系型数据库中优化器可以高效的将where语句转化成那个on语句,但是hive不会执行此优化。故在hive中join操作时尽量将条件放在on后面。

3、优化HiveQL语句,先过滤等。

4、在mapreduce过程中尽量使用压缩,即在map,shuffle,reducer使用snappy压缩。

5、设计好分区表和外部表,创建外部表尽量指定数据所在的文件夹,而不用load去加载。

6、设置map和reducer的任务个数,默认情况是一个块对应一个map任务,一般来说map任务个数不会去调整,而调整reducer的任务个数。reduce处理的数据量大小进行适当调整体现“分而治之”的思想。

7、JVM重用:一个job可能有多个map和reducer任务,每个任务会开启一个jvm虚拟机,默认情况下一个task对应一个jvm,任务完成就销毁jvm,我们可以设置jvm重用参数,这样一个jvm可以连续运行对个任务。

      缺点:开启JVM重用将会一直占用使用到的task插槽,以便进行重用,若某个job中的reduce task执行时间要比其他reduce task消耗时间多的话,那么保留的插槽却空闲,无法被其他的job使用,直到所有task都结束才会释放.

8、推测执行:木桶效应,若一个job有10个mapreduce任务,其中9个任务已经完成,那么application Master会在另外一个空闲的容器中运行最后一个相同的任务,哪个运行的快就使用哪个结果,运行慢的就被终止。

9、对表进行join时,要将大表放在后面,小表放在前面或者使用标记来告诉系统谁是大表or谁是小表

  SELECT /*streamtable(b)*/ a.key, a.value
  FROM a JOIN b ON a.key = b.key

10、在map端完成join(shuffle比较浪费时间,如果没有了reduce也就没有了shuffle)

(1)实现方式

  1、在SQL语句中添加Map join标记

   select /*+MapJoin(smallTable)*/smallTable.key, bigTable.value

   from smallTable JOIN bigTable ON smallTable.key = bigTable.key

  会优先将一张小表(默认小于25M,可以需要适当调节)的数据加载进内存中,然后大表的数据通过map端进行读取,然后和内存进行匹配,内存的计算速度很高,这样就在内存端进行了操作,不需要shuffle,不需要reduce

  2、自动的mapjoin

   set hive.auto.convert.join = true;(该参数为true时,Hive自动对左边的表统计量,如果是小表就加入内存,即对小表使用Map join),其中hive.mapjoin.smalltable.filesize是大小表判断的阈值。

hive之调优的更多相关文章

  1. 数据迁移过程中hive sql调优

    本文记录的是,在数据处理过程中,遇到了一个sql执行很慢,对一些大型的hive表还会出现OOM,一步一步通过参数的设置和sql优化,将其调优的过程. 先上sql ) t where t.num =1) ...

  2. Hive(十)Hive性能调优总结

    一.Fetch抓取 1.理论分析 Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算.例如:SELECT * FROM employees;在这种情况下,Hive可以简单 ...

  3. Hive参数调优

    调优 Hive提供三种可以改变环境变量的方法,分别是: (1)修改${HIVE_HOME}/conf/hive-site.xml配置文件: 所有的默认配置都在${HIVE_HOME}/conf/hiv ...

  4. Hive 企业调优

    9.企业级调优 9.1 Fetch 抓取 Fetch 抓取:Hive 中对某些情况的查询可以不必使用 MapReduce 计算: hive.fetch.task.conversion:more 9.2 ...

  5. hive tez调优(3)

    根据.方案最右侧一栏是一个8G VM的分配方案,方案预留1-2G的内存给操作系统,分配4G给Yarn/MapReduce,当然也包括了HIVE,剩余的2-3G是在需要使用HBase时预留给HBase的 ...

  6. hive的调优

    调优 1 Fetch抓取(Hive可以避免进行MapReduce) Hive中对某些情况的查询可以不必使用MapReduce计算.例如:SELECT * FROM employees;在这种情况下,H ...

  7. 关于Hive的调优(本身,sql,mapreduce)

    1.关于hive的优化 ->大表拆分小表 ->过滤字段 ->按字段分类存放 ->外部表与分区表 ->外部表:删除时只删除元数据信息,不删除数据文件 多人使用多个外部表操作 ...

  8. 060 关于Hive的调优(本身,sql,mapreduce)

    1.关于hive的优化 ->大表拆分小表 ->过滤字段 ->按字段分类存放 ->外部表与分区表 ->外部表:删除时只删除元数据信息,不删除数据文件 多人使用多个外部表操作 ...

  9. Hive 性能调优

    避免执行MR select * or select field1,field2 limit 10 where语句中只有分区字段或该表的本地字段 使用本地set hive.exec.mode.local ...

  10. HDP Hive性能调优

    (官方文档翻译整理及总结) 一.优化数据仓库 ① Hive LLAP  是一项接近实时结果查询的技术,可用于BI工具以及网络看板的应用,能够将数据仓库的查询时间缩短到15秒之内,这样的查询称之为Int ...

随机推荐

  1. P2627 修剪草坪 (单调队列优化$dp$)

    题目链接 Solution 70分很简单的DP,复杂度 O(NK). 方程如下: \[f[i][1]=max(f[j][0]+sum[i]-sum[j])\]\[f[i][0]=max(f[i-1][ ...

  2. c#image与byte数组的转换

    // image to byte[] Image photo = new Bitmap(selectPictureFile); System.IO.MemoryStream ms = new Syst ...

  3. 第一周训练 | STL和基本数据结构

    A - 圆桌问题: HDU - 4841 #include<iostream> #include<vector> #include<stdio.h> #includ ...

  4. jQuery file upload测试

    <input id="fileupload" type="file" name="files[]" data-url="Ha ...

  5. 洛谷P2661 信息传递(最小环,并查集)

    洛谷P2661 信息传递 最小环求解采用并查集求最小环. 只适用于本题的情况.对于新加可以使得两个子树合并的边,总有其中一点为其中一棵子树的根. 复杂度 \(O(n)\) . #include< ...

  6. android7.0后对于detected problems with app native libraries提示框显示

    log信息: 03-27 09:08:25.887   397   400 W linker  : /data/app/com.guagua.qiqi-1/lib/arm/libMedia.so ha ...

  7. TCP概述

    1. TCP提供的服务 我们知道TCP是一个面向连接.提供可靠数据数据传输服务的传输层协议.面向连接意味着发送端和接收端在交换数据前需要建立一个连接,和我们平常打电话一样,在通话前,需要拨号建立连接. ...

  8. Unity shader with lightmap

    小记一下用法与问题,时更 surface shader就不用操心了,自带lightmap计算 主要是vertex fragment shader部分 Unity5 bake light map有三种情 ...

  9. Recurrent Neural Network(1):Architecture

    Recurrent Neural Network是在单个神经元上,除了输入与输出外,添加了一条Recurrent回路.也就是说,节点当前的状态将会影响其未来的状态.下式可以表征此关系: st= f(s ...

  10. python time 和日期相关模块

    时间日期相关的模块 calendar 日历模块 time 时间模块 datetime 日期时间模块 timeit 时间检测模块 日历模块 calendar() 功能:获取指定年份的日历字符串 格式:c ...