`
yugouai
  • 浏览: 497706 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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高。

RCFile stores table data in a flat file consisting of binary key/value pairs.
 It first partitions rows horizontally into row splits, and then it vertically
 partitions each row split in a columnar way. RCFile stores the metadata of a 
row split as the key part of a record, and all the data of a row split as the
 value part.

  

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

 

行存储

 

HDFS块内行存储的例子:

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

 

列存储

HDFS块内列存储的例子

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

 

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

HDFS块内RCFile方式存储的例子:



 
 数据测试

源表数据记录数:67236221

 

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

 

--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

 

insert耗时、count(1)耗时比较:

 


 

第三步:查询响应时间

 

    测试一

 

方案一,测试整行记录的查询效率:
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

 

insert overwrite local directory 'XXX/XXXX' select game,game_server from hzr_test_xxx_table where game ='XXX';

 

 

方案二:

记录数:67236221

 

insert overwrite local directory 'xxx/xxxx' select game,game_server from hzr_test_xxx_table;

 

方案三:

记录数:

 

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。

  • 大小: 21.8 KB
  • 大小: 19.1 KB
  • 大小: 165 KB
  • 大小: 91.6 KB
  • 大小: 94.1 KB
  • 大小: 20.3 KB
  • 大小: 18.7 KB
  • 大小: 20 KB
  • 描述: aaa
  • 大小: 16.4 KB
分享到:
评论

相关推荐

    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