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

hive不同格式存储的性能测试

 
阅读更多
Hive文件存储格式的测试比较

博客分类: Hive分享


整理了一下网上的几种Hive文件存储格式的性能与Hadoop的文件存储格式。

Hive的三种文件格式:TEXTFILE、SEQUENCEFILE、RCFILE中,TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的,RCFILE是基于行列混合的思想,先按行把数据划分成N个row group,在row group中对每个列分别进行存储。另:Hive能支持自定义格式,详情见:Hive文件存储格式
基于HDFS的行存储具备快速数据加载和动态负载的高适应能力,因为行存储保证了相同记录的所有域都在同一个集群节点。但是它不太满足快速的查询响应时间的要求,因为当查询仅仅针对所有列中的 少数几列时,它就不能跳过不需要的列,直接定位到所需列;同时在存储空间利用上,它也存在一些瓶颈,由于数据表中包含不同类型,不同数据值的列,行存储不 易获得一个较高的压缩比。RCFILE是基于SEQUENCEFILE实现的列存储格式。除了满足快速数据加载和动态负载高适应的需求外,也解决了SEQUENCEFILE的一些瓶颈。

下面对这几种几个作一个简单的介绍:

TextFile:

Hive默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
可结合Gzip、Bzip2、Snappy等使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

SequenceFile:
SequenceFile是Hadoop API 提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部使用Hadoop 的标准的Writable 接口实现序列化和反序列化。它与Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile 继承自Hadoop API 的SequenceFile,不过它的key为空,使用value 存放实际的值, 这样是为了避免MR 在运行map 阶段的排序过程。

SequenceFile的文件结构图:


Header通用头文件格式:
SEQ 3BYTE
Nun 1byte数字
keyClassName
ValueClassName
compression (boolean)指明了在文件中是否启用压缩
blockCompression (boolean,指明是否是block压缩)
compression codec
Metadata 文件元数据
Sync 头文件结束标志
Block-Compressed SequenceFile格式



RCFile
RCFile是Hive推出的一种专门面向列的数据格式。 它遵循“先按列划分,再垂直划分”的设计理念。当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。需要说明的是,RCFile在map阶段从 远端拷贝仍然是拷贝整个数据块,并且拷贝到本地目录后RCFile并不是真正直接跳过不需要的列,并跳到需要读取的列, 而是通过扫描每一个row group的头部定义来实现的,但是在整个HDFS Block 级别的头部并没有定义每个列从哪个row group起始到哪个row group结束。所以在读取所有列的情况下,RCFile的性能反而没有SequenceFile高。

下面介绍行存储、列存储(详细参照:Facebook数据仓库揭秘:RCFile高效存储结构)

行存储

HDFS块内行存储的例子:

基于Hadoop系统行存储结构的优点在于快速数据加载和动态负载的高适应能力,这是因为行存储保证了相同记录的所有域都在同一个集群节点,即同一个 HDFS块。不过,行存储的缺点也是显而易见的,例如它不能支持快速查询处理,因为当查询仅仅针对多列表中的少数几列时,它不能跳过不必要的列读取;此 外,由于混合着不同数据值的列,行存储不易获得一个极高的压缩比,即空间利用率不易大幅提高。

列存储
HDFS块内列存储的例子

在HDFS上按照列组存储表格的例子。在这个例子中,列A和列B存储在同一列组,而列C和列D分别存储在单独的列组。查询时列存储能够避免读不必要的列, 并且压缩一个列中的相似数据能够达到较高的压缩比。然而,由于元组重构的较高开销,它并不能提供基于Hadoop系统的快速查询处理。列存储不能保证同一 记录的所有域都存储在同一集群节点,行存储的例子中,记录的4个域存储在位于不同节点的3个HDFS块中。因此,记录的重构将导致通过集群节点网络的大 量数据传输。尽管预先分组后,多个列在一起能够减少开销,但是对于高度动态的负载模式,它并不具备很好的适应性。

RCFile结合行存储查询的快速和列存储节省空间的特点:首先,RCFile保证同一行的数据位于同一节点,因此元组重构的开销很低;其次,像列存储一样,RCFile能够利用列维度的数据压缩,并且能跳过不必要的列读取。
HDFS块内RCFile方式存储的例子:



数据测试
源表数据记录数:67236221

第一步:创建三种文件类型的表,建表语法参考Hive文件存储格式

Sql代码  收藏代码
--TextFile 
set hive.exec.compress.output=true; 
set mapred.output.compress=true; 
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec; 
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec; 
INSERT OVERWRITE table hzr_test_text_table PARTITION(product='xxx',dt='2013-04-22') 
SELECT xxx,xxx.... FROM xxxtable WHERE product='xxx' AND dt='2013-04-22'; 
 
--SquenceFile 
set hive.exec.compress.output=true; 
set mapred.output.compress=true; 
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec; 
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec; 
set io.seqfile.compression.type=BLOCK; 
INSERT OVERWRITE table hzr_test_sequence_table PARTITION(product='xxx',dt='2013-04-22') 
SELECT xxx,xxx.... FROM xxxtable WHERE product='xxx' AND dt='2013-04-22'; 
 
--RCFile 
set hive.exec.compress.output=true; 
set mapred.output.compress=true; 
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec; 
set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec; 
INSERT OVERWRITE table hzr_test_rcfile_table PARTITION(product='xxx',dt='2013-04-22') 
SELECT xxx,xxx.... FROM xxxtable WHERE product='xxx' AND dt='2013-04-22'; 


第二步:测试insert overwrite table tablename select.... 耗时,存储空间
类型 insert耗时(S) 存储空间(G)
Sequence  97.291         7.13G
RCFile    120.901        5.73G
TextFile  290.517        6.80G


第三步:查询响应时间

测试一
Sql代码  收藏代码
方案一,测试整行记录的查询效率: 
select * from hzr_test_sequence_table where game='XXX' ;   
select * from hzr_test_rcfile_table where game='XXX' ;  
select * from hzr_test_text_table where game='XXX' ;  
 
方案二,测试特定列的查询效率: 
select game,game_server from hzr_test_sequence_table where game ='XXX'; 
select game,game_server from hzr_test_rcfile_table where game ='XXX'; 
select game,game_server from hzr_test_text_table where game ='XXX'; 

文件格式    查询整行记录耗时(S)    查询特定列记录耗时(S)
sequence        42.241                    39.918
rcfile          37.395                    36.248
text            43.164                    41.632



   测试二:
本测试目的是验证RCFILE的数据读取方式和Lazy解压方式是否有性能优势。数据读取方式只读取元数据和相关的列,节省IO;Lazy解压方式只解压相关的列数据,对不满足where条件的查询数据不进行解压,IO和效率都有优势。

方案一:
记录数:698020

Sql代码  收藏代码
insert overwrite local directory 'XXX/XXXX' select game,game_server from hzr_test_xxx_table where game ='XXX'; 


方案二:
记录数:67236221

Sql代码  收藏代码
insert overwrite local directory 'xxx/xxxx' select game,game_server from hzr_test_xxx_table; 

方案三:
记录数:

Sql代码  收藏代码
insert overwrite local directory 'xxx/xxx' 
select game from hzr_xxx_rcfile_table; 

文件类型 方案一 方案二 方案三
TextFile 54.895 69.428   167.667
SequenceFile 137.096 77.03   123.667
RCFile         44.28 57.037    89.9


上图表现反应在大小数据集上,RCFILE的查询效率高于SEQUENCEFILE,在特定字段数据读取时,RCFILE的查询效率依然优于SEQUENCEFILE。
分享到:
评论

相关推荐

    hive-testbench-hive14.zip大数据TPCDS-99SQL自动测试脚本

    《Hive Testbench与TPCDS:大数据性能测试与99条SQL脚本解析》 在大数据处理领域,Hive作为一个分布式数据仓库系统,被广泛应用于海量数据的存储和分析。而TPCDS(Transaction Processing Performance Council ...

    TPCDS测试-99条Hive基准测试流程

    TPCDS测试是对Hive数据仓库性能的全面评估,涉及多个层面的技术细节。通过这个过程,可以深入理解Hive在大数据环境下的性能瓶颈,为系统优化提供依据。同时,这也是提升大数据处理能力,实现高效决策支持的重要手段...

    hive2.1.1中orc格式读取报数组越界错误解决方法

    在Hive 2.1.1版本中,ORC(Optimized Row Columnar)格式是一种高效的数据存储方式,尤其适用于大数据处理。它提供了压缩、索引和列式存储等特性,能够极大地提高查询性能。然而,有时候在使用ORC格式读取数据时,...

    hadoop2.7.3+hive1.2.1+spark2.0.1性能测试

    - **Hive 查询性能测试:** 执行复杂SQL查询,对比不同数据量级下的响应时间。 - **Spark 性能测试:** 运行Spark应用程序,对比其与MapReduce的性能差异。 **5.3 数据收集与分析** - 收集测试过程中的各项指标,...

    hive 操作相关的测试数据集

    测试数据集通常包含各种场景,如不同数据类型、复杂查询、性能测试等,以全面检验Hive的功能和性能。通过分析和操作这个“hive操作相关的测试数据集”,用户可以深入了解Hive的实际应用,并提升在大数据环境下的数据...

    hive测试数据

    4. **文件格式**:Hive支持多种文件格式,如TextFile、SequenceFile、ORC和Parquet,每种格式都有其特定的优缺点,适用于不同的场景。 5. **表分区**:通过将大表按照某个或某些列的值划分为较小的部分,可以显著...

    hadoop大数据平台性能测试方案.doc

    在本文档中,Hive的性能测试包括了Hive查询的性能测试、Hive数据处理的性能测试等。 Spark的性能测试 Spark是大数据平台中的一个重要组件。Spark的性能测试是指对Spark的性能进行评估和测试。在本文档中,Spark的...

    大数据Hive测试数据uaction.rar

    这暗示了数据量相当大,适合用来测试Hive在处理大规模数据时的性能、稳定性和效率。同时,800万条记录可能包括了用户的多种操作,如浏览、点击、购买、搜索等,这样的多样性使得测试场景更为真实,能够全面检验Hive...

    hive客户端安装_hive客户端安装_hive_

    在大数据处理领域,Hive是一个非常重要的工具,它提供了一个基于Hadoop的数据仓库...在实际生产环境中,你可能还需要配置其他高级特性,如Hive与Hadoop安全性的集成、优化性能参数等,这都需要根据具体需求进行调整。

    Hive 性能测试程序,https://github.com/hortonworks/hive-testbench 编译

    `Hive Testbench` 是一个专门针对 Hive 进行性能测试的开源项目,由 Hortonworks 维护,它为开发人员和数据工程师提供了评估和优化 Hive 性能的平台。 在编译 `Hive Testbench` 之前,我们需要了解以下关键知识点:...

    Ambari下Hive3.0升级到Hive4.0

    这包括查询性能测试、新的 Hive 功能验证、数据完整性检查以及与其它服务(如 HBase、Spark)的集成测试。 8. **监控与优化**:升级后,密切关注 Hive 4.0 的运行状况,通过 Ambari 的监控功能检查资源使用、错误...

    Spark性能测试报告-Spark SQL在不同存储格式下的性能对比

    ### Spark性能测试报告-Spark SQL在不同存储格式下的性能对比 #### 测试目的与背景 本文旨在通过一系列的实验对比Spark SQL在不同存储格式(包括txt、Parquet、Ya100)下的性能表现。考虑到不同的机器环境及配置...

    基于hadoop子项目_Hive的云计算性能测试_沙恒.pdf

    ### 基于Hadoop子项目Hive的云计算性能测试 #### 一、引言 在信息化时代,数据量的增长速度惊人,据IDC的一项预测显示,2006年全球的数据总量约为0.18ZB(1ZB=10亿TB),而在2011年这一数字已达到了1.8ZB。随着...

    HIVE操作注册表.rar

    - **数据分析**:对大量注册表数据进行统计分析,找出模式或异常,以优化系统性能或检测潜在问题。 - **数据备份与恢复**:Hive可以作为一个平台来存储和恢复注册表的备份,以应对系统故障或数据丢失。 在实际操作...

    HIVE实战测试数据,HIVE实战测试数据

    4. **性能测试**:在实战中,我们需要衡量不同查询语句的执行时间和资源消耗,以了解Hive的性能表现。这可能涉及查询复杂度、数据量、分区策略等多个因素的影响。通过对比测试,可以找出优化点。 5. **用户定义函数...

    Hive用户指南 Hive user guide 中文版

    Hive支持多种数据存储格式,包括文本文件、序列化文件等。这些数据存储在HDFS中,并且可以通过Hive表来访问。 **1.6 其他Hive操作** 除了基本的数据存储和查询之外,Hive还支持一系列其他操作,如数据导入导出、...

    hive测试题(包含万级测试数据文件)

    描述中提到的"万级测试数据文件"意味着数据集包含成千上万个记录,这样的规模对于理解和掌握Hive在大数据处理中的性能和效率至关重要。通常,这样的数据集会被用来执行各种操作,如数据清洗、聚合、过滤、JOIN等,以...

Global site tag (gtag.js) - Google Analytics