hive优化-存储格式

Hive中的文件格式大致上分为面向行和面向列两类:

面向行:同一行的数据存储在一起,即连续存储。TextFile,SequenceFile。采用这种方式,如果只需要访问行的一小部分数据,亦需要将整行读入内存,推迟序列化一定程度上可以缓解这个问题,但是从磁盘读取整行数据的开销却无法避免。面向行的存储适合于整行数据需要同时处理的情况。
面向列:整个文件被切割为若干列数据,每一列数据一起存储。 RCFile,ORCFile。面向列的格式使得读取数据时,可以跳过不需要的列,适合于只处于行的一小部分字段的情况。但是这种格式的读写需要更多的内存空间,因为需要缓存行在内存中(为了获取多行中的某一列)。

textFile

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

SequenceFile

根据是否压缩,以及采用记录压缩还是块压缩,存储格式有所不同:
这里写图片描述

这里写图片描述
这里写图片描述
不压缩:
按照记录长度、Key长度、Value程度、Key值、Value值依次存储。长度是指字节数。采用指定的Serialization进行序列化。

Record压缩:
只有value被压缩,压缩的codec保存在Header中。

Block压缩:
多条记录被压缩在一起,可以利用记录之间的相似性,更节省空间。Block前后都加入了同步标识,一般建议使用BLOCK压缩。Block的最小值由io.seqfile.compress.blocksize属性设置。

RcFile

这里写图片描述
RCFILE是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取

OrcFile

这里写图片描述
OrcFile(Optimized Record Columnar File)提供了一种比RCFile更加高效的文件格式。其内部将数据划分为默认大小为250M的Stripe。每个Stripe包括索引、数据和Footer。索引存储每一列的最大最小值,以及列中每一行的位置。

多种存储格式对比

压缩格式文件大小查询时间(指定条件统计)压缩类型分割参数
textFile618.4 G186.1s
textFile_gz128.0 G76.8sgzset hive.exec.compress.output=true;set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
sequenceFile-block_gz132.7 G79.8sblockset hive.exec.compress.output=true;set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;SET mapred.output.compression.type=BLOCK;
rcFile_gz130.2 G84.7sgzset hive.exec.compress.output=true;set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
orcFile271.2 G66.5s需要在建表语句中添加:stored as ORC tblproperties (“orc.compress”=”NONE”);
orcFile_zlib123.3 G46.9s(无索引)/40.7s(有索引)zlib默认为zlib不需要设置
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive是一种用于在大数据环境中进行查询和分析的开源数据仓库解决方案。在Hive中,选择合适的存储格式对于查询性能和数据存储优化非常重要。 Hive支持多种存储格式,包括文本格式、序列文件格式、ORC格式和Parquet格式等。不同的存储格式对于数据的存储效率、压缩率和查询性能都有一定影响。 首先,文本格式是最基本的存储格式,它简单易用,但是不适合大规模数据存储和查询,因为它没有压缩和索引功能,查询性能会受到限制。 其次,序列文件格式是Hadoop默认的文件格式,它支持压缩和可切分,能够提高存储空间利用率和查询性能。 ORC(Optimized Rowe Columnar)格式是一种基于列式存储的高效存储格式,它能够提供更好的压缩比和查询性能,尤其适用于大规模数据仓库中的分析查询工作负载。 最后,Parquet格式也是一种列式存储格式,它具有更好的查询性能和压缩比,支持高级查询和分析操作。 在选择存储格式时,需要综合考虑数据类型、数据量、查询性能和存储空间等因素。如果数据量较小,可以选择文本格式或序列文件格式;对于大规模数据存储和分析场景,推荐选择ORC或Parquet格式。 此外,可以通过调整Hive的配置参数来进一步优化存储格式的选择,如选择适当的压缩算法、压缩级别和数据切分方式等。通过合理选择和配置存储格式,可以提高Hive查询性能、降低存储成本,并获得更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值