苏先生之Hive底层调优

一、为什么要了解底层

HiveQL是一种声明式语言,用户会提交查询,而hive将其转换成MapReduce job,大多数情况我们不需要了解hive的内部工作,内部复杂的查询解析、优化和执行过程大部分时间我们是可以忽视的,不过想要彻底的掌握hive,我们就需要学习hive的理论知识以及底层的实现,这样会让用户更加高效的使用hive。

二、hive的各种调优手段

1、学会使用explain

对于explain,可以帮助我们学习hive是如何将查询转换成MapReduce任务的。
如:

explain select sum(id) from number

在一个普通的查询语句前添加explain关键字,查询语句是不会执行的,它会打印出抽象语法树:
在这里插入图片描述
在图中我们可以看到有表名number,列名id,还有sum函数等,一个hive任务包含有多个stage阶段,不同的stage会存在依赖,查询越复杂通常stage会越多,通常也会启动更多的任务来完成。
stage plan的部分比较冗长也比较复杂,stage-1包含了这个job大部分的处理过程,而且会出发一个MapReduce,TableScan以这个表作为输入,然后产生一个id字段的输出,Group By Operator 会应用到sum(id),然后会产生一个输出的字段_col0(这是为临时结果字段按规则起的临时名字),这些都是map端的。而reduce这边,也就是Reduce Operator Tree下面,也有相同的Group By Operator,但是这次得到的是_col0字段进行的sum操作,最后我们看到了File Output Operator,说明输出是文本格式,是基于字符串输出格式:HiveIgnoreKeyTextOutputFormat
在这里插入图片描述
最后,因为该job没有limit,所以stage-0阶段没有任何操作

2、学会限制调整

大家在用SQL语句的时候limit语句是经常用到的,有时候对大量数据,我们并不需要把所有数据查询出来,所以我们会用到limit来限制行数,返回部分结果。通常情况下limit还是要先执行整条查询语句再返回部分结果,这种情况通常是浪费的,所以我们应该尽可能的避免,hive有一个配置属性的开启,当使用limit语句时,可以对其数据进行抽样

	<property>
		<name>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值