`
hugh.wangp
  • 浏览: 293049 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HIVE文件存储格式的测试比较

    博客分类:
  • HIVE
阅读更多

by hugh.wangp

 

根据自身涉及到的数据分布和使用需求,对HIVE上的三类文件格式做了如下测试,指导HIVE的文件格式选型。测试存在环境、数据分布、测试偏重点的不同,本测试只供参考,不作为大家选型决策的绝对指导。

HIVE的三种文件格式:TEXTFILE、SEQUENCEFILE、RCFILE中,TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的,RCFILE是基于行列混合的思想,先按行把数据划分成N个row group,在row group中对每个列分别进行存储。

基于HDFS的行存储具备快速数据加载和动态负载的高适应能力,因为行存储保证了相同记录的所有域都在同一个集群节点。但是它不太满足快速的查询响应时间的要求,因为当查询仅仅针对所有列中的少数几列时,它就不能跳过不需要的列,直接定位到所需列;同时在存储空间利用上,它也存在一些瓶颈,由于数据表中包含不同类型,不同数据值的列,行存储不易获得一个较高的压缩比。RCFILE是基于SEQUENCEFILE实现的列存储格式。除了满足快速数据加载和动态负载高适应的需求外,也解决了SEQUENCEFILE的一些瓶颈。

接下来就针对压缩比、数据加载、查询响应角度对HIVE的三种文件格式进行比较,主要比较对象为SEQUENCEFILE和RCFILE,因为TEXTFILE在压缩后不能发挥MapReduce的并行处理能力,所以此文件格式不会被我们采用。

压缩比
测试数据为1月11号产品表的当前数据,利用此数据保存到三张表,分别采用三种文件格式,压缩方式统一为gzip
存储格式               文件大小
TEXTFILE               21.4GB
SEQUENCEFILE     22.3GB
RCFILE                  18.0GB
RCFILE的压缩比优于SEQUENCEFILE。

上图是HADOOP的不同压缩方法的一个性能对比图(摘自《pro hadoop》第5章),其中gzip是空间和时间比较折中的压缩方法,后续测试也反应了这一点。

数据加载

上图是三类文件格式的数据插入不同压缩类型,不同文件格式的数据加载时间对比图。
1.同一份数据的加载时间为lzo < gzip < bz2和不同压缩方式性能对比图的结果一致。
2.目标表为SEQUENCEFILE的数据加载时间优于TEXTFILE和RCFILE。

查询响应
测试1:
数据表wp_product_target包含62个字段,字段类型包含:BIGINT、DOUBLE、STRING。
执行如下两种SQL查询:
方案一,测试整行记录的查询效率
select * from wp_product_target where product_id like '480523%';
方案二,测试特定列的查询效率
select product_id, gmt_create, dw_end_date from wp_product_target where product_id like '480523%';


上图反映了RCFILE的查询效率都优于SEQUENCEFILE。
测试2:
数据表wp_product_detail包含8个字段,只取了product_id和description两个字段做测试。product_id的数据占用存储为:447MB,description的数据占用存储为:89697MB。
本测试目的是验证RCFILE的数据读取方式和Lazy解压方式是否有性能优势。数据读取方式只读取元数据和相关的列,节省IO;Lazy解压方式只解压相关的列数据,对不满足where条件的查询数据不进行解压,IO和效率都有优势。

方案一:

insert overwrite local directory '/home/dwapp/hugh.wangp'
select product_id, description
from wp_product_detail
where product_id like '480523%';
方案二:
insert overwrite local directory '/home/dwapp/hugh.wangp'
select product_id, description
from wp_product_detail
where substr(product_id, 1, 2) = '50';
方案三:
insert overwrite local directory '/home/dwapp/hugh.wangp'
select product_id, description
from wp_product_detail_sf;

方案四:

insert overwrite local directory '/home/dwapp/hugh.wangp'
select product_id
from wp_product_detail;
前三个方案的查询数据量:800条,700万条,1.8亿条。

上图反应在大小数据集上,RCFILE的查询效率高于SEQUENCEFILE。


上图反应在特定字段数据读取时,RCFILE的查询效率依然优于SEQUENCEFILE。

总结
1.在压缩比方面,RCFILE有较优的压缩比,因为SEQUENCEFILE是行压缩,行内不同数据值统一压缩,但是RCFILE对每列独立压缩,避免了不同数据值的混合压缩,所以压缩比相对高一些。但是由于对列进行压缩存储,压缩性能比单单对行进行压缩消耗更多。也正体现了压缩的空间和时间的矛盾体。
2.数据加载方面,SEQUENCEFILE优于RCFILE,因为RCFILE的列压缩方式,数据加载压缩时的性能消耗比较大。但是对于数据仓库的一次写入、多次读取,数据的加载性能对整体利用影响没有压缩比和查询响应大。
3.查询响应方面,RCFILE有较优的表现。RCFILE的数据读取方式和Lazy解压方式起到了很大的作用,在读取数据的每个行组时,RCFILE只需读取元数据头部和查询指定的列,而不是行组的全部数据都读到内存中,节省了很多的I/O。虽然读取了元数据头部和查询指定的列,但是不是对这些数据完全解压,Lazy解压技术保证了,只解压满足where条件的数据。

总之,相对于SEQUENCEFILE,RCFILE的压缩比有20%左右的提升,数据加载时间有10%左右的劣势,查询响应时间平均有15%左右的优势,尤其在大数据量的非全字段查询上有30%左右的性能优势。
所以从上面的测试比较可以看出,RCFILE是HIVE最适合的文件存储格式,压缩方式采用GZIP压缩。
业界使用情况,FACEBOOK目前所有HIVE的文件全部采用RCFILE存储,国内的盛大也采用RCFILE存储。

 

 

2
0
分享到:
评论
1 楼 alexss1988 2016-09-29  
请问楼主,RCFILE由于列式存储方式,数据加载时性能消耗较大,但为什么insert的时候却总是比TextFile耗时更短了?我试验了很多次都是这样,只是比较累计CPU时间上,才有TextFile花费的时间恒小于RCFile。为什么了?

相关推荐

    hive文件存储格式对比实验测试数据

    hive测试数据,其中为日志类型,用于验证在hive中主流文件存储格式对比实验

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

    标题 "hive测试题(包含万级测试数据文件)" 指的是一个与Hive相关的练习或测试集,其中可能包含了用于大数据分析的万级条目数据。这些数据可能被设计成模拟真实世界的业务场景,帮助学习者或者从业者检验和提升在Hive...

    hive 操作相关的测试数据集

    Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许用户使用SQL方言(称为HQL)来查询、管理和处理大规模存储在Hadoop分布式文件系统(HDFS)中的数据。这个测试数据集“hive操作相关的测试数据集hive”显然...

    大数据Hive测试数据uaction.rar

    在Hive中,数据通常是存储在分隔符分割的文本文件中,例如CSV或TSV格式,每行代表一条记录,列之间用特定字符(如逗号、制表符)分隔。"uaction.dat"文件可能采用了类似格式,每行记录了一个用户的某个操作,列可能...

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

    5. **调优与迭代**:根据测试结果,对Hive进行调优,比如调整执行计划、优化join策略、使用更高效的文件格式等。然后再次运行测试脚本,看是否有所改进。 6. **报告编写**:最后,整理测试过程和结果,编写详细的...

    hive测试数据

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

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

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

    Hive大表的测试数据

    因此,设计合理的分区策略、合并小文件、使用ORC或Parquet等列式存储格式、使用Bucketing和Sorting等方法可以优化性能。 8. **Hive与ETL**:在大数据处理中,Hive常用于ETL(提取、转换、加载)流程。通过Hive,...

    Hive小表的测试数据

    例如,提供的压缩包文件"10万条小表数据(id为9万+随机数字)"可能是CSV或者TSV格式,可以使用`LOAD DATA LOCAL INPATH`命令将其加载到Hive表中。 2. **表分区**:为了优化查询性能,小表可以设计为分区表,尤其是...

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

    这些数据经过预处理后,被转化为Hive可识别的格式,如CSV或JSON,然后上传到HDFS(Hadoop分布式文件系统)中。测试数据的选择至关重要,因为它直接影响到Hive查询性能的评估和数据分析的准确性。 1. **数据导入与...

    kerberos认证hive连接代码

    `springmvc配置`涉及到的是Spring框架的配置文件,通常以XML格式存在,如`hive-config.xml`。在这个配置文件中,我们需要定义数据源、事务管理器以及其他与Hive JDBC相关的设置。为了使用Kerberos认证,我们需要在...

    hive 驱动包 hive 链接 datagrip的驱动包

    在大数据处理领域,Hive是一款基于Hadoop的数据仓库工具,它允许用户使用SQL类的语言(称为HQL)来查询、管理、分析存储在Hadoop分布式文件系统中的大规模数据集。而DataGrip是一款由JetBrains公司开发的强大数据库...

    Windows XP注册表文件格式简单分析(源码).rar

    这些HIVE文件存储在%SystemRoot%\System32\config目录下,以REG_FIL格式存在。 "Windows XP注册表文件格式简单分析.doc"文档可能详细阐述了注册表HIVE文件的内部结构,包括块、链表、索引节点等。每个HIVE文件由一...

    hive相关jar包

    7. **hive-serde-0.11.0.jar**:Hive SerDe(Serilization/Deserialization)是 Hive 对数据进行序列化和反序列化的接口,用于将不同格式的数据转化为 Hive 可以理解的形式。 8. **log4j-1.2.14.jar**:这是一个...

    Hive实战之视频网站的测试数据

    Hive依赖于Hadoop的分布式文件系统(HDFS)存储数据,其工作原理是将数据转换为适合MapReduce任务的格式,然后通过MapReduce进行计算。Hive的元数据(如表结构、分区等)存储在MySQL或其它数据库中,用于管理和跟踪...

    Hive教程.pdf

    - **支持多种数据格式**: 支持多种存储格式,如TextFile、SequenceFile、ORC等。 - **高容错性**: 基于Hadoop的分布式文件系统(HDFS),具有高容错性。 - **应用场景**: - **数据分析**: 用于离线批处理数据,...

    Hive用户指南 Hive user guide 中文版

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

    dbeaver连接hive2.1.1依赖jar包

    比如`avro.jar`用于Avro数据格式,`zookeeper.jar`用于ZooKeeper服务,`slf4j-api.jar`和`slf4j-log4j12.jar`用于日志记录,以及其他可能的数据库驱动,如`mysql-connector-java.jar`如果Hive配置了MySQL元存储。...

    Hive用户手册中文版.pdf

    Hive还支持其他数据存储格式,如ORC(优化列存储)和Parquet等。 Hive提供了基本操作语句,如创建表(CreateTable)、插入数据(Insert)、加载数据(Load)和显示数据(Show)等。除了基本的CRUD操作外,Hive还...

Global site tag (gtag.js) - Google Analytics