Hive调优前相关规划设计

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供Hive SQL(简称HQL)查询功能,可以将HQL语句转换为MapReduce、Tez、Spark任务运行。本文仅讨论Hive on MapReduce的性能调优场景。

《Hive调优前相关规划设计》 图片.png

在进行Hive参数调优和SQL调优之前,要进行相应的规划设计,包括:Hive表使用高效的文件格式,Hive表文件及中间文件使用合适的文件压缩格式,根据业务特征创建分区表以及创建分桶表。

1.1.Hive表文件使用高效的文件格式

(1)建议使用ORC

ORC文件格式可以提供一种高效的方法来存储Hive数据,运用ORC可以提高Hive的读、写以及处理数据的性能。

以下两种场景需要应用方权衡是否使用ORC:

(a)文本文件加载到ORC格式的Hive表的场景:由于文本格式到ORC,需要耗费较高的CPU计算资源,相比于直接落地成文本格式Hive表而言加载性能会低很多;

(b)Hive表作为计算结果数据,导出给Hadoop之外的外部系统读取使用的场景:ORC格式的结果数据,相比于文本格式的结果数据而言其易读性低很多。
除以上两种场景外,其他场景均建议使用ORC作为Hive表的存储格式。

(2)考虑使用Parquet

Parquet的核心思想是使用“record shredding and assembly algorithm”来表示复杂的嵌套数据类型,同时辅以按列的高效压缩和编码技术,实现降低存储空间,提高IO效率,降低上层应用延迟。

Parquet是语言无关的,而且不与任何一种数据处理框架绑定在一起,适配多种语言和组件,能够与Parquet配合的组件有:

查询引擎:Hive、Impala、Pig;
计算框架:MapReduce、Spark、Cascading;
数据模型:Avro、Thrift、Protocol Buffers、POJOs。
对于Impala和Hive共享数据和元数据的场景,建议Hive表存储格式为Parquet。

1.2.Hive表文件及中间文件使用合适的文件压缩格式

GZip和Snappy,这两种压缩算法在大数据应用中最常见,适用范围最广,压缩率和速度都较好,读取数据也不需要专门的解压操作,对编码来说透明。

压缩率跟数据有关,通常从2到5不等;两种算法中,GZip的压缩率更高,但是消耗CPU更高,Snappy的压缩率和CPU消耗更均衡。

对于存储资源受限或客户要求文件必须压缩的场景,可考虑使用以上两种压缩算法对表文件及中间文件进行压缩。

1.3.根据业务特征创建分区表

使用分区表能有效地分隔数据,分区条件作为查询条件时,减少扫描的数据量,加快查询的效率。

如果业务数据有明显的时间、区域等维度的区分,同时有较多的对应维度的查询条件时,建议按照相应维度进行一级或多级分区。

1.4.根据业务特征创建分桶表

分桶的目的是便于高效采样和为Bucket MapJoin及SMB Join做数据准备。

对于Hive表有按照某一列进行采样稽核的场景,建议以该列进行分桶。数据会以指定列的值为key哈希到指定数目的桶中,从而支持高效采样。

对于对两个或多个数据量较大的Hive表按照同一列进行Join的场景,建议以该列进行分桶。当Join时,仅加载部分桶的数据到内存,避免OOM。

《Hive调优前相关规划设计》 图片.png

    原文作者:趋势One
    原文地址: https://www.jianshu.com/p/c1148c44b212
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞