Hive调优前相关规划设计

作者: 老老戟 | 来源:发表于2019-01-20 14:17 被阅读0次

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

    图片.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。

    图片.png

    相关文章

      网友评论

        本文标题:Hive调优前相关规划设计

        本文链接:https://www.haomeiwen.com/subject/pcuxjqtx.html