一.严格模式

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

  >set hive.mapred.mode=strict;【默认为nonstrict非严格模式】

  查询限制:

    1.对于分区表,必须添加where查询条件来对分区字段进行条件过滤。

    2.order by语句必须包含limit输出限制。

    3.限制执行笛卡尔积的查询。

二.Hive排序

  1.order by:对于查询结果做全排序只允许有一个reduce处理,当数据量较大时,应慎用。严格模式下必须结合limit来使用。

  2.sort by:对于单个reduce的数据进行排序。

  3.distribute by:分区排序,经常和sort by结合使用。

  4.cluster by:相当于sort by + distribute by【cluster by不能通过asc,desc的方法指定排序规则,可通过distribute by column sort by column asc|desc的方式】

三.Hive Join

  1.join计算时,将小表放在join的左边。

  2.map join,在Map端完成join,实现方式:

    2.1sql方式,在sql语句中添加mapjoin标记【mapjoin hint】

      语法:select /*+MAPJOIN(smallTable) */ smallTable.key,bigTable.value from smallTable JOIN btTable ON smallTable.key = bigTable.key;

    2.2开启自动mapjoin,通过设置一下配置启动自动的mapjoin

      set hive.auto.convert.join = true;【该参数为ture时,Hive自动对左边的表统计量,如果是小表就加入内存,即对小表用mapjoin】

    相关参数配置:

    >hive.mapjoin.smalltable.filesize;【大小表判断阈值,表的大小小于该值则为小表,加载到内存中】

    >hive.ignore.mapjoin.hint;【默认值为true,是否忽略mapjoin hint即mapjoin标记】

    >hive.auto.convert.join.noconditionaltask;【默认值为true,将普通的join转化为普通的mapjoin时,是否将多个mapjoin转化为一个mapjoin】

    >hive.auto.convert.join.noconditionaltask.size;【将多个mapjoin转化为一个mapjoin时,列表的最大值】

四.Map-Side聚合

  通过设置以下参数开启在map端的聚合:set hive.map.aggr=true;

  相关参数配置:

    >hive.groupby.mapaggr.checkinterval:map端group by执行聚合时处理的数据条数【默认100000】

    >hive.map.aggr.hash.min.reduction:进行聚合的最小比例【预先对100000条数据做聚合,若聚合之后的数据量/100000的值大于该配置【默认0.5】则不聚合】

    >hive.map.aggr.hash.percentmemeory:map端聚合使用的内存的最大值

    >hive.map.aggr.hash.force.flush.memory.threshold:map端做聚合操作时hash表的最大可以容量,大于该值则会触发flush

    >hive.groupby.skewindata:是否对groupby产生的数据倾斜做优化,默认为false

五.控制hive中map和reduce的数量

  map数量相关参数:

    >mapred.max.split.size:一个split的最大值,即每个map处理文件的最大值

    >maprd.min.split.size.per.node:一个节点上split的最小值

    >mapred.min.split.size.per.rack:一个机架上split的最小值

  reduce数量相关参数:

    >mapred.reduce.tasks:强制指定reduce任务的数量

    >hive.exec.reducers.bytes.per.reducer:每个reduce任务处理的数据量

    >hive.exec.reducers.max:每个任务最大的reduce数

六.JVM重用

  适用场景:

    1.小文件个数过多

    2.task个数过多

  通过执行:set mapred.job.reuse.jvm.num.tasks=n;来设置task插槽个数

  缺点:

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

Hive性能优化【严格模式、join优化、Map-Side聚合、JVM重用】的更多相关文章

  1. 061 hive中的三种join与数据倾斜

    一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...

  2. hive的join优化

    “国际大学生节”又称“世界大学生节”.“世界学生日”.“国际学生日”.1946年,世界各国学生代表于布拉格召开全世界学生大会,宣布把每年的11月17日定为“世界大学生节”,以加强全世界大学生的团结和友 ...

  3. Hive性能优化

    1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先 ...

  4. Hive性能优化上的一些总结

    https://blog.csdn.net/mrlevo520/article/details/76339075 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据 ...

  5. Hive性能优化(全面)

    1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次 ...

  6. Hive Join优化

    在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化: 1. 只支持等值连接 2. 底层会将写的HQL语句转换为MapRed ...

  7. Hive性能分析和优化方法

    Hive性能分析和优化方法 http://wenku.baidu.com/link?url=LVrnj-mD0OB69-eUH-0b2LGzc2SN76hjLVsGfCdYjV8ogyyN-BSja5 ...

  8. Hive优化-大表join大表优化

    Hive优化-大表join大表优化 5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个 ...

  9. Hive的压缩存储和简单优化

    一.Hive的压缩和存储 1,MapReduce支持的压缩编码 压缩格式 工具 算法 文件扩展名 是否可切分 对应的编码/解码器 DEFLATE 无 DEFLATE .deflate 否 org.ap ...

随机推荐

  1. Nodejs 包与 npm第三方模块安装和 package.json 以及 cnpm

    包与 NPM 1. 包 Nodejs 中除了它自己提供的核心模块外,可以自定义模块,也可以使用第三方的模块.Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依 赖关系的模块进行统一管理. ...

  2. Java jsoup获取网页中的图片

    获取图片 package com.vfsd.net; import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...

  3. shell基础知识之数组

    数组允许脚本利用索引将数据集合保存为独立的条目.Bash支持普通数组和关联数组,前者 使用整数作为数组索引,后者使用字符串作为数组索引.当数据以数字顺序组织的时候,应该使 用普通数组,例如一组连续的迭 ...

  4. react一些问题

    一.死循环 1.问题描述 function handleClick() { this.setState({count: ++this.state.count}); console.log(" ...

  5. 零基础C#网站开发实战教学(全套)最新更新2019-12-16。。。

    这是林枫山自己编写制作的全套Visual Studio 2013 C# 网站开发案例实战教学教程,欢迎下载学习. 下载目录链接如下(如果链接下载不了,请加QQ:714259796获取教程): 网站界面 ...

  6. python:时间格式转化

    1.获取秒级时间戳与毫秒级时间戳.微秒级时间戳 import time import datetime t = time.time() print (t) #原始时间数据 print (int(t)) ...

  7. PHP防止被重复请求接口的方法(网页端签名验证的方法)

    PHP防止被重复请求接口的方法(网页端签名验证的方法) 可以采取签名验证的方式来 解决这个问题 1 time和随机数都是PHP生成的显示在前端 2 前端生成sign 3 进行每次请求的sign计数 这 ...

  8. js精度缺失问题

    /** ** 加法函数,用来得到精确的加法结果 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. ** 调用:accAdd(arg ...

  9. WEUI Search Input回车键无法跳转解决

    现象:回车键依然当前页面, window.location.href 设置无法起作用 增加 window.event.returnValue = false; 解决问题

  10. JVM 配置常用参数和常用 GC 调优策略

    链接:https://juejin.im/post/5c94a123f265da610916081f   JVM 配置常用参数 堆参数 回收器参数 如上表所示,目前主要有串行.并行和并发三种,对于大内 ...