hive实战读书笔记(第9章)Hive性能优化

hive用户面临的一个比较大的问题是,用户需要等待较长的响应时间,与传统关系数据库查询的性能相比,hive响应速度慢的令人发指
本章介绍一套诊断改进hive查询性能的系统方法,通过这个过程,将单个hive查询的执行时间从475秒缩短到49s

执行引擎

hive目前支持3种执行引擎,每种引擎都各有优缺点,默认的引擎由hive-site.xml文件中的hive.execution.engine属性控制,也可以运行时修改该属性的值,根据具体查询重写此设置.下来对比mr和tez

mapreduce

传统的mr作业执行hive查询,他是最初的执行引擎,如果查询不能通过其他的引擎来执行,他是最安全的后备,将hive.execution.engine设置成mr可以选择该执行引擎

tez

通过减少操作和限制写入磁盘的中间数据量,apache tez提供比mr更高的效率,tez的执行计划中,将约简器的中间数据直接传递给下一个约简器,省去了将数据写入磁盘的开销.

属性取值用途
hiveserver堆的大小16GB默认1G,在此基础上增加
hive.prewarm.enabletrue告诉hive创建tez容器
hive.prewarm.numcontainers不同数值调整tez专用容器数量
TEZ_CONTAINER_MAX_JAVA_HEAP_FRACTION0.8Tez容器的规模是YARN容器规模的倍数
hive.auto.convert.join.nonconditionaltask.size不同数值调整映射连接的规模

存储格式

有些文件格式专门针对Hive使用进行了优化,ORC文件和Parquet文件,两种文件都旨在减少查询期间从磁盘读取的数据量,从而提高查询的总体性能.

ORC文件

ORC(optimized Row columnar)格式是一种基于列的存储格式,它并不是按单个数据行连续的将全部的数据存储在磁盘上,而是按每列连续存储数据,针对不需要某列的查询,可以避免不必要的磁盘访问,可以跳过那些在结果中不需要的大部分数据
ORC格式是一种可以分割的文件格式,意味着一个文件可以被分割成多个可以并行处理的块.每个数据块被进一步细分为256MB的数据带,这些数据带则用于将列数据存储在一起,不需要查询某个列的时候可以直接跳过这个数据带.

parquet格式

parquet格式是另一种基于列的存储格式,也将每列的所有数据连续存储在磁盘上,与ORC类似的性能优势,实测结果比ORC带来的性能提高少一些

矢量化查询执行

hive的默认查询执行引擎一次处理一行,因此在嵌套循环中需要有多层虚拟方法调用,从cpu视角是非常低效的,矢量化查询是一种hive特性,其目的是按照每批1024行读取数据,并且一次性对整个记录集合而不是单条记录应用操作,进而消除那些效率低下的问题.
要使用这种优化,必须是ORC格式存储

查询执行计划

hive驱动程序负责将sql语句转换为针对目标执行引擎的执行计划
sql提交到解析器,解析器根据表名去规划器,调用hive metastore查询表的元数据,解析器生成逻辑运算树,查询优化器拿到这些数据,生成物理运算树,调用执行引擎进行执行

  • 解析器:解析sql生成一个抽象语法树(abstract syntax tree AST),描述了为生成正确的结果集所必须执行的逻 辑运算
  • 规划器:从hive metastore中检索表的元数据,包括hdfs文件位置,存储格式,行数等
  • 查询优化器:使用AST和表的元数据,生成物理运算树,所谓的执行计划,描述了为检索数据所必须执行的所有的物理运算,查询优化器生成的执行计划最终决定了再hadoop集群中执行的任务,所以对数据分析系统(如hive)的性能影响最大,因为生成正确的执行计划和错误的执行计划,可能就意味着几秒到几个小时的差别

利用表的统计信息,基于代价的优化可以帮助hive驱动程序生成一个最优的执行计划,在性能代价方面对其生成的每个可能的执行计划作出明智的决策

基于代价的优化

基于代价的优化(cost-based optimization CBO)引擎利用了hive metastore的统计数据来差生最优的查询计划,用于优化统计信息有两种类型:一种是表统计信息,包括表的未压缩大小,行数和用于存储数据的文件数;另一种是列统计信息,其中包括NDV(唯一值的个数)和最小,最大值,计数值
CBO进行了连接重排,改进了针对星型连接模式和浓密连接模式的计划,并提供了基于样本查询的改进机会
缺点是必须收集和维护正确的表统计信息,以使基于代价的优化引擎变得有效,遗憾的是表统计信息收集是一项开销很大的操作,但对于那些收集了统计信息的表而言,所有后续查询都可以从中获益.设置hive.stats.autogather,还有一些其他的参数
hive的explain
explain命令的输出包括3个部分,该查询的抽象语法树,该计划不同阶段之间的依赖关系,以及每个阶段的描述

执行计划

CBO帮我们生成了一个最优的执行计划,计划的执行过程中,从硬盘的读取和处理的数据量已经尽可能早的减少,是整个工程更加高效

性能检查表小结

通过使用tez,ORC存储格式,矢量化查询执行,CBO引擎等技术减少执行时间,只需要少量的工作量就可以将大多数技术都用到现在的大多数hive表中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值