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. 使用ant编译Android APK

    ANT —— Apache Ant is a Java library and command-line tool that help building software. 1. 部署ANT的使用环境 ...

  2. Java项目案例之---定时器的使用

    定时器的使用 使用定时器,在当前时间的10秒后调用方法,输出语句 import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  3. 容器宽高不确定,图片宽高不确定,css如何实现图片响应式?

    图片响应式 在响应式开发中最烦恼的应该就是图片了,虽然图片设置max-width: 100%;可以让图片宽度占满容器,但是高度就不能自适应了.如果将容器高度限死,那么我们就要使用媒体查询来控制容器的高 ...

  4. 如何把vue.js项目部署到服务器上

    如何把vue.js项目部署到服务器上面,我用的是tomcat服务器 1-改一下config/index.js文件,如下图,把assetsPublicPath: './', productionSour ...

  5. flask-script实现自动刷新页面调试

    本文flask==1.0.2 1.导入extension包 from flask_script import Manager 2.使用manager管理工具 app = Flask(__name__) ...

  6. php面向对象三大特性

    1.封装: 目的:使类更加安全 步骤:1.成员变量变成private(私有的)2.设置方法/调用方法3.在方法中增加限制 <?php class shao { private $aa;//必须是 ...

  7. upc 组队赛18 STRENGTH【贪心模拟】

    STRENGTH 题目链接 题目描述 Strength gives you the confidence within yourself to overcome any fears, challeng ...

  8. Lua中C API栈操作

    向栈中压入数据: lua_pushnil(lua_State*); lua_pushboolean(lua_State*, bool); lua_pushnumber(lua_State*, lua_ ...

  9. Codeforces 1110C (思维+数论)

    题面 传送门 分析 这种数据范围比较大的题最好的方法是先暴力打表找规律 通过打表,可以发现规律如下: 定义\(x=2^{log_2a+1}\) (注意,cf官方题解这里写错了,官方题解中定义\(x=2 ...

  10. 排序---快速排序及其切分函数Partition应用

    快速排序   快速排序通过一个切分元素将数组分成两个子数组,左子数组小于等于切分元素,右子数组大于切分元素,将这两个子数组排序,也就是将整个数组排序了. 代码如下: public class Sort ...