《hive编程指南》阅读笔记摘要(九)

第10章 调优
一个hive任务会包含有一个或多个阶段stage,不同的stage间有依赖关系

一、分析复杂的或者执行效率低的查询时,可以使用explain语句,如
explain select .....;

二、explain extended可以产生更多的输出信息
explain extended select ......;

三、优化limit:对输出结果有影响,慎用

四、join优化:参看第六章

五、本地模式:有时候,启动一个hadoop job的时间比执行job的时间还要多。对于小数据集,可以执行本地模式来执行job
设置以下属性,可以让hive在适当的时侯启用这个优化:
set mapred.job.tracker=local;
set mapred.tmp.dir=/home/edward/tmp;

六、并行执行:默认情况下,hive一次只会执行一个stage。要加快执行速度,可以启动并行执行,让没有依赖关系的stage并发执行。
set hive.exec.parallel=true;

七、严格模式:可以禁止三种类型的查询
set hive.mapred.mode=true
1、查询分区表时,where子句中必须含有分区字段的过滤条件;
2、使用了order by语句的查询,必须使用limit语句;
3、限制笛卡尔积的查询;


八、调整mapper和reducer的个数
hive是按照输入的数据量大小来确定reducer个数的。
dfs -count类似linux的du -s ,可以计算指定目录下所有数据的总大小
hadoop dfs -count /user/media6/fracture/ins/*

每个reducer处理的输入数据量是hive.exec.reducers.bytes.per.reducer默认值是1GB
hive的reducer个数mapred.reduce.tasks,默认是3
在共享集群上处理任务,需要控制资源利用情况:hive.exec.reducers.max可以控制一个job消耗的reducer资源。

九、JVM重用
mapreduce的调优参数:mapred.job.reuse.jvm.num.tasks,每个jvm运行多少个task,-1表示不限制
适用场景:有很多小文件或task特别多的场景
缺点:开启这个属性后,会一直占用task插槽,以便进行重用,直到任务完成才会释放。如果一个不平衡的job里有几个reduce task比别的reduce task执行时间多得多,那么保留的插槽会一直空闲者不能被其他job使用,直到所有task都结束才会释放。

十、索引
见第八章

十一、动态分区调整
见第五章
涉及到的属性包括
严格模式
hive.exec.dynamic.partition.mode=strict
hive允许一次创建的动态分区的数量,默认1000
hive.exec.max.dynamic.partitions=2000
每一个mapreduce节点上可以创建的动态分区最大数
hive.exec.max.dynamic.partitions.pernode=10000    
在datanode上,一次可以打开的文件数量,默认256
dfs.datanode.max.xcievers=8192


十二、推测执行
推测执行是hadoop的一个功能,通过(加快获取单个task的结果)(以及进行侦测将执行慢的tasktracker加入到黑名单)来提高整体的任务执行效率。

十三、三个mapreduce中多个group by
将查询中的多个group by操作组装到单个mapreduce任务中
hive.multigroupby.singlemr=false

十四、虚拟列

*****************************
微信公众号:IT人成长关注
大数据技术QQ群:485681776

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值