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存储。
分享到:
相关推荐
hive测试数据,其中为日志类型,用于验证在hive中主流文件存储格式对比实验
45.Hive中数据文件的存储格式介绍及对比 46.常见的压缩格式及MapReduce的压缩介绍 47.Hadoop中编译配置Snappy压缩 48.Hadoop及Hive配置支持snappy压缩 49.Hive中的常见调优 50.Hive中的数据倾斜及解决方案-三种join...
先说说思路:1是直接从mysql输出至hive中,另外一个是先将数据搞到hdfs中,再load一下,当然这只是textfile存储格式而言,若是ORC等其他列式存储的话建议先搞一个textfile格式的中间表,再insert into table select ...
1.6.3 存储格式 1.6.4 导入数据 1.6.5 表的修改 1.6.6 表的丢弃 1.7 查询数据 1.7.1 排序(Sorting)和聚集(Aggregating) 1.7.2 MapReduce脚本 1.7.3 连接 1.7.4 子查询 1.7.5 视图(view) 1.8 用户定义函数...
1.6.3 存储格式 1.6.4 导入数据 1.6.5 表的修改 1.6.6 表的丢弃 1.7 查询数据 1.7.1 排序(Sorting)和聚集(Aggregating) 1.7.2 MapReduce脚本 1.7.3 连接 1.7.4 子查询 1.7.5 视图(view) 1.8 ...
3 数据序列化――处理文本文件及其他格式的文件 3.1 了解MapReduce 中的输入和输出 3.1.1 数据输入 3.1.2 数据输出 3.2 处理常见的序列化格式 3.2.1 XML . 技术点12 MapReduce 和XML 3.2.2 JSON...
1.2.1:内存列存储(In-Memory Columnar Storage) 6 1.2.2:字节码生成技术(bytecode generation,即CG) 6 1.2.3:scala代码优化 7 二:sparkSQL运行架构 8 2.1:Tree和Rule 9 2.1.1:Tree 10 2.1.2:Rule 10 2.2...
4.4 本章小结5 优化HDFS 处理大数据的技术5.1 处理小文件技术点24 使用Avro 存储大量小文件5.2 通过压缩提高数据存储效率技术点25 选择合适的压缩解码器技术点26 在HDFS、MapReduce、Pig 和Hive 中使用...
您可以在简洁的Scala DSL中指定Hive表结构(称为“视图”),分区方案,存储格式,从属视图以及转换逻辑; 您可以使用多种选项来表达数据转换-从文件操作和MapReduce作业到Pig脚本,Hive查询,Spark作业和Oozie工作...
以列格式存储数据使阅读器仅可以读取,解压缩和处理当前查询所需的值。 由于ORC文件可识别类型,因此编写器为该类型选择最合适的编码,并在写入文件时建立内部索引。 谓词下推使用这些索引来确定特定查询需要读取...
sparksql模型solr-poc POC在Solr中存储机器学习模型在hadoop生态系统的大多数技术部分(例如hive,spark等)中,推荐的存储机器学习模型的格式是木地板格式(由ASF开发)。 此POC试图在Solr中读取,解析并存储实木...