常用调优测试语句 : 
 
①显示当前hive环境的参数值:
set 参数名;
如:  
hive> set mapred.map.tasks;
mapred.map.tasks;
 
②设置hive当前环境的参数值,但仅对本次连接有效
set 参数名 = 值;
如:
hive>
set mapred.map.tasks;
mapred.map.tasks=2;
 
④查看当前hive环境的所有参数值:
set -v;
⑤重置当前hive环境的所有参数值:
reset;
 
 
hive job优化
 
1、并行优化
hive job的并行化执行,在job之间没有依赖关系时可以同时执行,并行数另外配置,默认为8,开启并行会消耗更多的集群资源来提高执行速度,可对特定作业作并行执行合适。
hive.exec.parallel=true;
Job并行最大数,与job并行配置配合使用,但受集群资源与Job之间是否依赖的因素影响,即最大数为64但资源稀缺或存在不依赖的job数不够也无法达到最大值。
hive.exec.parallel.thread.number=8
 
2、本地模式优化(减低网络IO的负载,对小任务有用,大任务还得分而治之)
hive.exec.mode.local.auto=true;
当一个job满足如下条件会使用本地模式:
①job的输入数据大小必须小于:
        hive.exec.mode.local.auto.inputbytes.max  (默认128)
②job的map数必须小于参数:
        hive.exec.mode.local.auto.tasks.max  (默认4)
③job的reduce数必须为0或者1
 
3、job合并输入小文件(会启动新的job合并文件)
hive.merge.smallfiles.avgsize=256000000;
当输出文件平均大小小于该值,启动新job合并文件
hive.merge.size.per.task=64000000;
合并之后的文件大小
 
4.jvm重利用
mapred.job.reuse.jvm.num.tasks=20;
JVM
重利用可以使job长时间保留slot(下个map无需再次初始化jvm),直到作业结束,这个对于较多任务和较多小文件的任务是非常有意义的,减少执行
时间。当然这个值不能设置过大,因为有些作业会有reduce任务,如果reduce任务没有完成,则map认为占用的slot不能释放,其他的作业可能
就需要等待。
 
5、压缩数据
中间压缩就是处理hive查询的多个job之间的数据,对于中间压缩,最好选择一个节省CPU耗时的压缩方式
  • hive.exec.compress.intermediate=true;//决定查询的中间
    map/reduce job (中间 stage)的输出是否为压缩格式
  • hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; //中间
    map/reduce job 的压缩编解码器的类名(一个压缩编解码器可能包含多种压缩类型),该值可能在程序中被自动设置。
  • hive.intermediate.compression.type=BLOCK  (压缩单元为块压缩) //中间
    map/reduce job 的压缩类型,如 "BLOCK""RECORD"
 
hive查询最终的输出也可以压缩
  • hive.exec.compress.output=true; //决定查询中最后一个
    map/reduce job 的输出是否为压缩格式
  • mapred.output.compression.codec=orgapache.hadoop.io.compress.GzipCodec;  // 压缩格式
  • mapred.output.compression.type=BLOCK  //压缩类型
 
6、Map优化
 
mapred.map.taskes=10;
(1)默认map个数
  default_num = total_size / block_size;
(2)期望大小
  goal_num = mapred.map.casks;
(3)设置处理的文件大小
  split_size = max(mapred.min.split.size,block_size);
  split_num = total_size / split_size;
(4)计算的map个数
  compute_map_num = min(split_num,max(default_num,goal_num));
 
 经过以上的分析,在设置map个数的时候,可以简单的总结为一下的几点:
  • (1)如果增大map个数,则设置mapred.map.tasks为一个较大的值
  • (2)如果想减小map个数,则设置mapred.min.split.size为一个较大的值。
 
情况1:输入文件size巨大,但不是小文件)
增大mapred.min.split.size的值
情况2:输入文件数量巨大,且都是小文件,就是单个文件的size小于blockSize。(造成网络负载大)
这种情况通过增大mapred.min.split.size不可行,需要使用CombineFileInputFormat将多个input path合并成一个InputSplit送个mapper处理,从而减少mapper的数量
 
 
map端聚合(执行combine)
hive.map.aggr=true; //消耗更多的内存来提高效率
推测执行(多启动一个map来防止map失败)
mapred.map.tasks.speculative.execution
 
mapred.map.tasks.speculative.execution=true
mapred.reduce.tasks.speculative.execution=true
hive.mapred.reduce.tasks.speculative.execution=true;
 
7、Hive
Shuffle优化
Map端
Reduce端
io.sort.mb
io.sort.spill.percent
min.num.spill.for.combine
io.sort.factor
io.sort.record.percent

mapred.reduce.parallel.copies
mapred.reduce.copy.backoff
io.sort.factor
mapred.job.shuffle.input.buffer.percent
mapred.job.reduce.input.buffer.percent
 
 
 
8、Hive Reduce优化
 
(1)设置reduce数
mapred.reduce.tasks = 10  (设置了也未必全用,使用个数公式如下)
hive.exec.reducers.max 默认999
hive.exec.reducer.bytes.per.reducer 默认:1G
 
reduce使用个数的计算公式
numRTasks = min [ maxReducers,input.size / perReducer ]
maxReducers = hive.exec.reducers.max
perReducer = hive.exec.reducers.bytes.per.reducer
 
(2)推测执行
 
mapred.reduce.tasks.speculative.execution
hive.mapred.reduce.tasks.speculative.excution
 
 
9、数据倾斜优化
注意:如果hql使用多个distinct是无法使用这个参数去解决倾斜问题,可以改用sum()+group by解决
 
hive.optimize.skewjoin 
//是否优化数据倾斜的 Join,对于倾斜的 Join 会开启新的 Map/Reduce Job 处理。 
 
数据倾斜时负载均衡,当选项设定为true,生成的查询计划会有两个MRJob。第一个MRJob
中,Map的输出结果集合会随机分布到Reduce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果是相同的GroupBy Key有可能被分发到不同的Reduce中,从而达到负载均衡的目的;第二个MRJob再根据预处理的数据结果按照GroupBy Key分布到Reduce中(这个过程可以保证相同的GroupBy Key被分布到同一个Reduce中),最后完成最终的聚合操作。
  
默认值:false     
hive.skewjoin.key    //倾斜键数目阈值,超过此值则判定为一个倾斜的 Join 查询。   
默认值: 1000000     
hive.skewjoin.mapjoin.map.tasks  //处理数据倾斜的 Map Join 的 Map 数上限。   
默认值: 10000     
hive.skewjoin.mapjoin.min.split  //处理数据倾斜的 Map Join 的最小数据切分大小,以字节为单位,默认为32M。   
默认值:33554432     
 
 
参考资料:
 

Hive 常用优化参数的更多相关文章

  1. hadoop入门到实战(6)hive常用优化方法总结

    问题导读:1.如何理解列裁剪和分区裁剪?2.sort by代替order by优势在哪里?3.如何调整group by配置?4.如何优化SQL处理join数据倾斜?Hive作为大数据领域常用的数据仓库 ...

  2. mysql常用优化参数

    修改全站搜索 修改my.ini(my.cnf) ,在 [mysqld] 后面加入一行“ft_min_word_len=1”,然后 重启Mysql,再登录网站后台(模块管理->全站搜索)重建全文索 ...

  3. Hive常用性能优化方法实践全面总结

    Apache Hive作为处理大数据量的大数据领域数据建设核心工具,数据量往往不是影响Hive执行效率的核心因素,数据倾斜.job数分配的不合理.磁盘或网络I/O过高.MapReduce配置的不合理等 ...

  4. [Hive_add_8] Hive 常用参数配置

    0. 说明 记录 Hive 常用参数的配置 1. 设置本地模式 让 Hive 自动使用 Hadoop 的本地模式运行作业,提升处理性能 适合小文件,一般用于测试 set hive.exec.mode. ...

  5. Hive设置配置参数的方法,列举8个常用配置

    Hive设置配置参数的方法 Hive提供三种可以改变环境变量的方法,分别是: (1).修改${HIVE_HOME}/conf/hive-site.xml配置文件: (2).命令行参数: (3).在已经 ...

  6. Hive性能优化

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

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

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

  8. Hive性能优化(全面)

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

  9. Hive SQL优化思路

    Hive的优化主要分为:配置优化.SQL语句优化.任务优化等方案.其中在开发过程中主要涉及到的可能是SQL优化这块. 优化的核心思想是: 减少数据量(例如分区.列剪裁) 避免数据倾斜(例如加参数.Ke ...

随机推荐

  1. python中的range与xrange

    range 也是一种类型(type),它是一个数字的序列(s sequence of numbers),而且是不可变的,通常用在for循环中. class range(stop) class rang ...

  2. linux下面安装coreseek与mmseg

    1tar xzvf coreseek-3.2.14.tar.gz2cd mmseg-3.2.14/./configure --prefix=/usr/local/mmseg3 checking for ...

  3. Oracle之RMAN备份恢复1-基础篇

    1,rman的作用与体系架构 1.1 什么是rman rman(recovery manager)是oracle8i以后dba的一重要工具一般位于$oracle_home/bin目录下,主要用来备份, ...

  4. FZU2110 Star【计算几何】

    Overpower often go to the playground with classmates. They play and chat on the playground. One day, ...

  5. stat命令的实现-mysate

    任务详情 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k,grep -r的使用 伪代码 产品代码mystate.c,提交码云链接 测试代码,mysate与stat( ...

  6. HDU 1754 - I Hate It & UVA 12299 - RMQ with Shifts - [单点/区间修改、区间查询线段树]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Time Limit: 9000/3000 MS (Java/Others) Memory Li ...

  7. gis 相关资料

    --gis原理学习 http://group.cnblogs.com/GIS/best-1.html http://www.cnblogs.com/SuperXJ/tag/移动GIS/ --gis坐标 ...

  8. bzip2 zip 压缩后体积比 0.8:1

    1. 对.bz2 后缀文件 跳过不处理 2.逐行同字段的json文件,压缩后大小为原文件的12.81% 测试文件近似认为为逐行json文本数据,没有进行多文件重复测试,没有统计时间: {"u ...

  9. 【Git 使用笔记】第四部分:git在公司中的开发流程

    先声明几个变量 仓管A:主分支,只有master分支仓管B:开发分支,只有各个业务开发分支   仓管B fork 于 A 如下图 为了保证 代码的稳定性,只有 仓管B中的某个分支测试完毕并进行了代码r ...

  10. SQL Server学习路径(文章目录)

    SQL Server文章目录 SQL Server文章目录(学习路径)  转自:http://www.cnblogs.com/CareySon/archive/2012/05/08/2489748.h ...