大数据文件格式揭秘
textfile
文件存储就是正常的文本格式,将表中的数据在hdfs上 以文本的格式存储,下载后可以直接查看,也可以使用cat命令查看。
优点弊端:
- 行存储使用textfile存储文件默认每一行就是一条记录,
- 可以使用任意的分隔符进行分割。
- 但无压缩,所以造成存储空间大。可结合Gzip、Bzip2、Snappy等使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
rcfile
在hdfs上将表中的数据以二进制格式编码,并且支持压缩。下载后的数据不可以直接可视化。
RCFile全称Record Columnar File,列式记录文件,是一种类似于SequenceFile的键值对(Key/Value Pairs)数据文件。
在当前的基于Hadoop系统的数据仓库中,数据存储格式是影响数据仓库性能的一个重要因素。Facebook于是提出了集行存储和列存储的优点于一身的RCFile文件存储格式。
为了提高存储空间利用率,Facebook各产品线应用产生的数据从2010年起均采用RCFile结构存储,按行存储(SequenceFile/TextFile)结构保存的数据集也转存为RCFile格式。
此外,Yahoo公司也在Pig数据分析系统中集成了RCFile,RCFile正在用于另一个基于Hadoop的数据管理系统Howl(http://wiki.apache.org/pig/Howl)。
而且,根据Hive开发社区的交流,RCFile也成功整合加入其他基于MapReduce的数据分析平台。有理由相信,作为数据存储标准的RCFile,将继续在MapReduce环境下的大规模数据分析中扮演重要角色。
优点弊端:
- 行列混合的存储格式,基于列存储。
- 因为基于列存储,列值重复多,所以压缩效率高。
- 磁盘存储空间小,io小。
orcfile
ORC File,它的全名是Optimized Row Columnar (ORC) file,其实就是对RCFile做了一些优化。据官方文档介绍,这种文件格式可以提供一种高效的方法来存储Hive数据。它的设计目标是来克服Hive其他格式的缺陷。运用ORC File可以提高Hive的读、写以及处理数据的性能
优点弊端:
- 由Hadoop中RC files 发展而来,比RC file更大的压缩比,和更快的查询速度
- Schema 存储在footer中
- 不支持schema evolution
- 支持事务(ACID)
- 为hive而生,在许多non-hive MapReduce的大数据组件中不支持使用
- 高度压缩比并包含索引
parquet
优点弊端:
- 与ORC类似,基于Google dremel
- Schema 存储在footer
- 列式存储
- 高度压缩比并包含索引
- 相比ORC的局限性,parquet支持的大数据组件范围更广
sequencefile
SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。
SequenceFile支持三种压缩选择:none,record,block。Record压缩率低,一般建议使用BLOCK压缩。
Avro
优点弊端:
- 主要为行存储
- 设计的主要目标是为了满足schema evolution
- schema和数据保存在一起
比较
- 行式存储or列式存储:Parquet和ORC都以列的形式存储数据,而Avro以基于行的格式存储数据。 就其本质而言,面向列的数据存储针对读取繁重的分析工作负载进行了优化,而基于行的数据库最适合于大量写入的事务性工作负载。
- 压缩率:基于列的存储区Parquet和ORC提供的压缩率高于基于行的Avro格式。
- 可兼容的平台:ORC常用于Hive、Presto;Parquet常用于Impala、Drill、Spark、Arrow;Avro常用于Kafka、Druid。
测试
存储格式 | ORC | Sequencefile | Parquet | RCfile | Avro |
---|---|---|---|---|---|
数据压缩后大小 | 1.8G | 67.0G | 11G | 63.8G | 66.7G |
存储耗费时间 | 535.7s | 625.8s | 537.3s | 543.48 | 544.3 |
SQL查询响应速度 | 19.63s | 184.07s | 24.22s | 88.5s | 281.65s |
在压缩存储时间上,除Sequencefile外基本都相差无几。
数据压缩比例上ORC最优,相比textfile节省了50倍磁盘空间,parquet压缩性能也较好。
SQL查询速度而言,ORC与parquet性能较好,远超其余存储格式。
综合上述各种性能指标,建议工作中原始日志写入hive的存储格式都采用ORC或者parquet格式,这和目前主流的做法一致。
https://blog.csdn.net/weixin_36714575/article/details/80091578