delete hive_【实战干货】Hive调优策略之架构优化

大家好,我是勾叔。 Hive作为大数据领域常用的数据仓库组件,在设计和开发阶段都需要注意效率问题。 影响Hive效率的不仅仅是数据量过大,而数据倾斜、数据冗余、job或I/O过多、MapReduce分配不合理等因素都对Hive的效率会有影响。 今天,勾叔带大家从架构优化方面来聊Hive调优策略之架构优化,包括执行引擎、优化器、分区表、分桶表、文件格式、数据压缩等。
1. 执行引擎
Hive支持多种执行引擎,例如MapReduce、Tez、Spark、Flink。我们可以通过hivesite.xml文件中的hive.execution.engine属性控制。 下面,通过一张图来展示使用Tez执行引擎对Hive的调优。

5aec0121c4714d5c046516e54aaa6bc2.png

Tez是一个构建于YARN之上的支持复杂的DAG(有向无环图)任务的数据处理框架。由Hontonworks开源,将MapReduce的过程拆分成若干个子过程,同时可以把多个mapreduce任务组合成一个较大的DAG任务,减少了MapReduce之间的文件存储,同时合理组合其子过程,从而大幅提升MR作业的性能。
2. 优化器
与关系型数据库类似,Hive会在真正执行计算之前,生成逻辑执行计划与物理执行计划,并进行优化。Hive有两种优化器:Vectorize(向量化优化器) 与 Cost-BasedOptimization (CBO 成本优化器)。 矢量化查询执行 矢量化查询执行通过一次批量执行1024行,而不是每行,由此来提高扫描、聚合、过滤器和连接等操作的性能,这个功能显然可以缩短查询执行时间,其具体配置如下:

set hive.vectorized.execution.enabled = true; 

-- 默认 false

set hive.vectorized.execution.reduce.enabled = true;

-- 默认 false

备注:要使用矢量化查询执行,必须使用ORC格式存储数据 ,执行引擎必须为Tez。 成本优化器 Hive的CBO是基于apache Calcite的,Hive的CBO通过查询成本(有analyze收集的统计信息)会生成有效率的执行计划,最终会减少执行的时间和资源的利用,其具体配置如下:
SET hive.cbo.enable=true; --从 v0.14.0默认trueSET hive.compute.query.using.stats=true; -- 默认falseSET hive.stats.fetch.column.stats=true; -- 默认falseSET hive.stats.fetch.partition.stats=true; -- 默认true
3. 分区表  
对于一张比较大的表,将其设计成分区表可以提升查询的性能,对于一个特定分区的查询,只会加载对应分区路径的文件数据,所以执行速度会比较快。分区字段的选择是影响查询性能的重要因素,尽量避免层级较深的分区,这样会造成太多的子文件夹。 常见的分区字段,如下:
  • 日期或时间:如year、month、day或者hour,当表中存在时间或者日期字段。
  • 地理位置:如国家、省份、城市等。
  • 业务逻辑:如部门、销售区域、客户等。
4. 分桶表
与分区表类似,分桶表的组织方式是将HDFS上的文件分割成多个文件。分桶可以加快数据采样,也可以提升join的性能(join的字段是分桶字段),因为分桶可以确保某个key对应的数据在一个特定的桶内(文件),巧妙地选择分桶字段可以大幅度提升join的性能。通常情况下,分桶字段可以选择常用于过滤操作或者join操作的字段。
5. 文件格式
在HiveQL的create table语句中,可以使用 stored as ... 指定表的存储格式。Hive表支持的存储格式有TextFile、SequenceFile、RCFile、ORC、Parquet等。 存储格式一般需要根据业务进行选择,生产环境中绝大多数表都采用TextFile、ORC、Parquet存储格式之一。 TextFile是最简单的存储格式,它是纯文本记录,也是Hive的默认格式,其磁盘开销大,查询效率低,更多的是作为跳板来使用。RCFile、ORC、Parquet等格式的表都是不能由文件直接导入数据,必须由TextFile来做中转。 Parquet和ORC都是Apache旗下的开源列式存储格式。列式存储比起传统的行式存储更适合批量OLAP查询,并且也支持更好的压缩和编码。选择Parquet的原因主要是它支持Impala查询引擎,并且对update、delete和事务性操作需求很低。
6. 数据压缩
压缩技术可以减少map与reduce之间的数据传输,从而可以提升查询性能,关于压缩的配置可以在hive的命令行中或者hive-site.xml文件中进行配置,具体如下:
SET hive.exec.compress.intermediate=true;
开启压缩之后,可以选择的压缩格式,如下图所示。

b63fb81a31469f131ca1c8d758382693.png

至此,关于Hive调优策略——架构优化的介绍完毕,希望分享的文章能让大家对Hive的架构优化有一个初步的了解,更多丰富的知识内容勾叔会在后面的分享中展开,敬请关注。如果各位老铁有想了解的知识也可以在下面给勾叔留言哦~~ 大家如果想进行更深入的了解和学习,请关注勾叔谈大数据参与更多互动。

07adcf5aa90c794aabbdf15ed2c5ac19.png

推荐阅读:【实战干货】Hive调优策略之参数优化新一代流式计算框架:Structured Streaming(一)流处理:什么是流处理?以及你必须考虑的消息送达保证问题Spark 核心数据结构:弹性分布式数据集 RDD

debc1daffbd5db8e48c626d324e30ad2.gif

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值