`
乡里伢崽
  • 浏览: 111892 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hive 压缩策略

    博客分类:
  • hive
 
阅读更多
Hive使用的是Hadoop的文件系统和文件格式,比如TEXTFILE,SEQUENCEFILE等。
         在Hive中对中间数据或最终数据数据做压缩,是提高数据吞吐量和性能的一种手段。对数据做压缩,可以大量减少磁盘的存储空间,比如基于文本的数据文件, 可以将文件压缩40%或更多,同时压缩后的文件在磁盘间传输和I/O也会大大减少;当然压缩和解压缩也会带来额外的CPU开销,但是却可以节省更多的I /O和使用更少的内存开销。
         Hadoop jobs作业,往往是I/O密集型的,而非CPU集型的。数据压缩对I/O密集型的作业带来大大的性能提升,但是如果用户的jobs作业时CPU密集型 的,那么在使用压缩就会降低性能,这就要用户对作业的类型做判断,权衡是否要对数据做压缩。
     
         选择合适的编解码器
         对数据做压缩,可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,但对数据做压缩和解压缩总会增加CPU的开销,故最好对那些I/O密集型的作业使用数据压缩——这样的作业会有富余的CPU资源,或者对那些磁盘空间不富裕的系统。
         Hadoop默认支持Gzip和BZip2的解压缩方式,包括原生的linux解压缩库。Snappy压缩在最近的Hive版本中才被添加的压缩算法,如果您使用的是Hive不支持Snappy的话,用户就要手动添加。过去经常使用的是LZO压缩算法。
         那么,为什么要使用不同的压缩算法呢?它们都有什么区别呢?BZip2有最高的压缩比但也会带来更高的CPU开销,Gzip较BZip2次之;如果基于磁盘利用率和I/O考虑,这两个压缩算法都是比较有吸引力的算法。
         LZO和Snappy算法有更快的解压缩速度,如果在关注数据解压多于磁盘利用率和I/O开销的场景中,它们都是不错的选择。 LZO和Snappy在压缩数据上大致相当,但Snappy算法在解压速度上要较LZO更快。                 
         在选择解压缩算法时,另外一个比较重要的考虑就是压缩格式是否是支持可分割的。Hadoop的会将大文件分割成HDFS block(默认64MB)大小的splits分片,每个分片对应一个Mapper程序。在这几个压缩算法中,只有 BZip2和LZO提供block级的压缩,而Gzip和Snappy则不支持。
         Snappy压缩算法时首选。

         打开Hive(即由mappe产生的)中间数据文件的压缩功能
         HiveQL语句最终会被编译成Hadoop的Mapreduce job,开启Hive的中间数据压缩功能,就是在MapReduce的shuffle阶段对mapper产生的中间结果数据压缩。在这个阶段,优先选择一个低CPU开销的算法。
         可以通过参数hive.exec.compress.intermediate来开启和禁用该功能,默认情况下该值值为false,将之设置为true为激活中间数据压缩功能:

Java代码    收藏代码
<property> 
    <name>hive.exec.compress.intermediate</name> 
    <value>true</value> 
    <description>This controls whether intermediate files  produced by Hive between mutiple map-redece job are compressed.The compression codec and other options are determined from hadoop config variables mared.output.compress*</description> 
</property> 

         具体的压缩算法参数配置,这是一个hadoop的配置参数,可以在Hadoop的$HADOOP_HOME/conf/marred-site.xml或$HADOOP_HOME/conf/hive-site.xml配置文件中。 SnappyCodec比较适合在这种场景中编解码器,该算法会带来很好的压缩性能和较低的CPU开销:

Java代码    收藏代码
<property> 
    <name>mapred.map.output.compression.codec</name> 
    <value>org.apache.hadoop.io.compress.SnappyCodec</value> 
    <description>This controls whether intermediate files  produced by Hive between mutiple map-redece job are compressed.The compression codec and other options are determined from hadoop config variables mared.output.compress*</description> 
</property> 

  
         最Hive的数据文件压缩
         用户可以对最终生成的Hive表的数据通常也需要压缩。参数 hive.exec.compress.output控制这一功能的激活与禁用。用户可以通过节本来打开这个功能,同样也可以在XML配置文件中将该功能配置成全局变量:

Java代码    收藏代码
<property> 
    <name>hive.exec.compress.output</name> 
    <value>true</value> 
    <description>This controls whether the final outpus of a query(  to a local/hdfs file or a Hive table) is compressed.The compression codec and other options are determined from hadoop config variables mared.output.compress*</description> 
</property> 

         将hive.exec.compress.output参数设置成true后,然后选择一个合适的编解码器,如选择SnappyCodec:

Java代码    收藏代码
<property> 
    <name>mapred.output.compression.codec</name> 
    <value>org.apache.hadoop.io.compress.SnappyCodec</value> 
</property> 


         Sequence Files
         压缩数据文件可以节省磁盘空间,但是在Hadoop中有些原生压缩文件的缺点之一就是不支持分割。支持分割的文件可以并行的有多个mapper程序处理大数据文件,大多数文件不支持可分割是因为这些文件只能从头开始读。
         Sequence File是可分割的文件格式,支持Hadoop的block级压缩。这样,我们就可以将Hive表存储定义成SEQUENCEFILE:

Java代码    收藏代码
CREATE TABLE a_sequence_file_table SORTED AS SEQUENCEFILE; 

         Sequence Files有三个不同的压缩选项:NOE,RECORD和BLOCK。RECORD是默认选项,通常BLOCK会带来较RECORD更好的压缩性能。同很 多其他压缩选项一样,这个压缩类型参数不是Hive特有的,需要在Hadoop中或在每一个Hive查询脚本中2设置。

Java代码    收藏代码
<property> 
    <name>mapred.output.compression.type</name> 
    <value>BLOCK</value> 
    <description>If the job outputs are to compressed as SequenceFiles,how should the be compressed? Should be one od NONE,RECORDOR BLOCK.</description> 
</property> 
分享到:
评论

相关推荐

    深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存

    ### 深入浅出Hive企业级架构优化 #### Hive概述 Apache Hive 是一个基于 Hadoop 的数据...总之,通过对 Hive 架构、SQL 语句、数据压缩以及分布式缓存等方面的综合优化,可以有效提升 Hive 在企业级应用中的表现。

    《Hive数据仓库案例教程》教学大纲.pdf

    8. **Hive数据压缩**:讨论Hive如何进行数据压缩,提高存储效率和查询性能,理解各种压缩算法在Hive中的应用。 9. **Hive优化**:讲解如何优化Hive查询性能,包括表设计优化、查询语句优化和资源管理优化,以提高大...

    hive-exec-2.1.1.jar

    同时,Hive的性能可以通过优化元数据、分区策略、并行执行、压缩等方式进一步提升。 总的来说,理解Hive及其相关组件的工作原理,以及如何解决特定问题,对于大数据分析师和数据工程师来说至关重要。正确配置和使用...

    cloudera-hive-cdh6.3.2源码包

    4. **Hive 分区策略** 分区是 Hive 提高查询性能的重要手段。源码中的 `org.apache.hadoop.hive.ql.metadata.Partition` 类表示分区,`org.apache.hadoop.hive.ql.plan.CreateTableDesc` 中定义了如何创建分区的...

    hive常见的优化方案ppt

    1. **开启Hive压缩**:压缩可以显著减少数据存储空间,加快读取速度。可以开启Hive的中间数据和最终数据压缩,使用`hive.exec.compress.output=true`和`hive.exec.compress.intermediate=true`,并选择合适的压缩...

    jdbc连接hive的jar包

    标题 "jdbc连接hive的jar包" 涉及的关键知识点主要集中在Hive的JDBC连接以及相关依赖的Java库上。Hive是一个基于Hadoop的数据仓库...同时,了解Hive的元数据存储、分区策略、表类型等特性也对有效使用Hive至关重要。

    apache-hive-2.3.9,linux安装包

    Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like的...在实际操作中,你可能还需要配置Hadoop的HDFS、YARN等组件,以及优化Hive的性能设置,如分区策略、桶表、压缩编码等,以适应你的特定需求。

    《企业级Hive实战课程》大纲

    通过本课程的学习,学员不仅能够全面了解Hive的基本概念、操作方法与优化策略,还能够掌握如何在实际工作中有效利用Hive进行数据处理和分析。此外,通过对Hive高级特性和实战案例的学习,学员还将具备解决复杂问题的...

    hive tunning

    本文将深入探讨Hive的核心架构、性能优化策略、数据导入导出流程、安全性增强以及与其他流行工具的集成,旨在帮助读者全面掌握Hive的使用技巧,实现高效的数据管理和分析。 #### Hive——SQL分析工具,适用于任意...

    Hive使用手册Hive使用手册

    在大数据处理领域,Apache Hive 是一个非常重要的工具,它提供了SQL-like的语言(HQL)用于对存储在Hadoop上的大规模数据进行...在实际工作中,不断探索和学习新的优化策略,将使Hive在大数据场景下的表现更加出色。

    kafaka+hive.rar

    标题中的“kafaka+hive.rar”表明这是一个关于Kafka和Hive整合的压缩文件,主要探讨如何在大数据处理环境中将消息队列系统Kafka与数据仓库工具Hive相结合,以实现更高效的数据流动和分析。Hive是Apache Hadoop项目的...

    apache-hive-3.1.2-bin.tar.gz

    标题中的"apache-hive-3.1.2-bin.tar.gz"表明这是一个Hive 3.1.2的二进制发行版,以tar.gz格式压缩。这种压缩包通常包含Hive的可执行文件、库文件、配置文件以及必要的脚本,用于在Linux或Unix环境中快速部署和运行...

    hive的学习资料

    【Hive 学习资料】 Hive 是一个基于 Hadoop 的数据仓库系统,它主要设计用于处理和管理大规模数据集。Hive 提供了一个类似 SQL 的查询语言...了解和掌握 Hive 的核心概念、操作和优化策略是大数据分析中的重要一环。

    王家林hive学习资料

    Hive的架构优化是课程的重点,包括降低IO负载、表分区、动态分区、压缩和分布式缓存等技术,以提升Hive的性能。 针对HQL的优化,课程将深入探讨具体的策略和方法,包括Map和Reduce的优化、数据倾斜问题的解决,以及...

    Hive用户指南(Hive_user_guide)_中文版pdf

    7. **Hive优化**:包括选择合适的存储格式(如TextFile、RCFile、Parquet)、使用分区和桶优化查询、调整执行计划、启用数据压缩等策略。优化的主要目标是提高查询效率和减少资源消耗。 8. **Hive与其他系统集成**...

    第6章:Hive性能优化及Hive3新特性1

    存储优化涉及HDFS的Block大小调整、Hive的块大小配置,以及利用Hive的压缩配置选项。合理的存储设置可优化I/O性能,减少网络传输量。 5. **Explain命令与MapReduce属性优化** 使用`Explain`命令查看查询执行计划...

    开发高效的hive程序

    Hive支持多种压缩格式,如Gzip、Bzip2和Lzo,选择合适的压缩算法可以在保证解压速度的同时节省存储。 3. 索引:Hive的索引功能虽然有限,但依然可以用于加速某些查询。创建Bucketing或Skewed Join索引可以帮助优化...

    Hive查询优化整理与Hive简易版思维导图

    二、Hive SQL优化策略 1. **避免使用SELECT ***:仅选择需要的列可以减少数据传输和处理量。 2. **使用WHERE子句过滤数据**:尽早过滤掉不需要的数据,减少数据处理量。 3. **JOIN操作优化**:尽量使用INNER JOIN...

    Hive Summit 2011-join

    Hive Summit 2011-join介绍了Facebook中Hive实现的多种join策略。Hive作为一个数据仓库工具,主要用于处理大规模数据集的分析和查询,而join操作是数据仓库中常见且关键的操作之一。在大数据的背景下,如何高效地...

    Hive 优化以及执行原理

    本篇将深入探讨Hive的优化策略及其执行原理。 一、Hive 优化策略 1. **表分区**:分区是Hive优化的基础,通过将大表划分为小的逻辑部分,可以显著提高查询速度。合理的分区策略应基于查询中常用的过滤条件,例如...

Global site tag (gtag.js) - Google Analytics