Hive调优

使用explain 其可以帮助我们学习Hive是如何将查询转化为MapReduce任务的。
在执行语句前面增加explain关键字即可,如 explain select sum(number) from onecol ;

使用explain extended语句可以产生更多的输出信息。

限制调整
limit语句是我们经常使用的,在很多情况下limit语句还是需要执行整个查询语句的,然后再返回部分结果。因为这种情况通常是浪费的,所以应该尽可能的避免出现这种情况。Hive有一个属性可以开启,当使用limit语句时其可以对源数据进行抽样:
<property>
<name>hive.limit.optimize.enable</name>
<value>true</value>
</property>
一旦该属性设置为true时,那么还有两个参数可以控制这个操作。也就是hive.limit.row.max.size和hive.limit.optimize.limit.file.

Join优化

本地模式
大多数的hadoop Job是需要Hadoop提供完整的可扩展性来处理大数据集的。不过Hive有时的输入数据是非常小的,这种情况下,未查询触发执行任务的时间消耗要比实际job的执行时间要多得多。对于这种情况下,Hive可以通过开启本地模式来处理这些任务,对于小数据集,执行时间可以明显的被缩短。
可以在$HIVE_HOME/conf/hive-site.xml文件中配置如下属性即可:
将hive.exec.mode.local.auto 属性的值设置为true即可。

并行执行
开启hive.exec.parallel属性(hive-site.xml)

严格模式
Hive提供了一种严格模式,可以防止用户执行那些可能产生意想不到的不好影响的查询。设置hive.mapred.mode的值为strict可以禁止3中类型的查询:
对于分区表,除非where语句中含有分区字段过滤条件来限制数据范围,否则不允许执行;
对于使用了order by 语句的查询,要求必须使用limit语句。因为order by 为了执行排序过程会将所有的结果数据分发到同一个reducer进行处理,强制要求用户增加这个limit语句可以防止reducer额外执行很长一段时间;
限制笛卡尔积的查询,Hive在进行Join操作时必须使用on关键字来指定条件。

调整map和reducer的个数

JVM重用
设置mapred.job.reuse.jvm.num.tasks(mapred-site.xml)的值,该功能的一个缺点就是,开启JVM重用将会一直占用使用到的task插槽,以便进行重用,知道任务完成后才能释放。

索引 可以用来加快含有group by语句的查询的计算速度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值