TextFile
- 默认格式,存储方式为行存储,数据不做压缩,磁盘开销大,数据解析开销大。
- 可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,压缩后的文件不支持split,Hive不会对数据进行切分,从而无法对数据进行并行操作。
- 并且在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比SequenceFile高几十倍。
SequenceFile
- SequenceFile是Hadoop API提供的一种二进制文件支持,以key-value的形式序列化到文件中,存储方式为行存储,其具有使用方便、可分割、可压缩的特点。
- 压缩数据文件可以节省磁盘空间,但Hadoop中有些原生压缩文件的缺点之一就是不支持分割。支持分割的文件可以并行的有多个mapper程序处理大数据文件,大多数文件不支持可分割是因为这些文件只能从头开始读。Sequence File是可分割的文件格式,支持Hadoop的block级压缩。
- SequenceFile支持三种压缩选择:
NONE
,RECORD
,BLOCK
。RECORD是默认选项,Record压缩率低,通常BLOCK会带来较RECORD更好的压缩性能,一般建议使用BLOCK压缩。 - 优势是文件和hadoop api中的MapFile是相互兼容的。
RCFile
- 存储方式:数据按行分块,每块按列存储。结合了行存储和列存储的优点:
- RCFile 保证同一行的数据位于同一节点,因此元组重构的开销很低;
- 像列存储一样,RCFile 能够利用列维度的数据压缩,并且能跳过不必要的列读取;
- 数据追加:RCFile不支持任意方式的数据写操作,仅提供一种追加接口,这是因为底层的 HDFS当前仅仅支持数据追加写文件尾部。
ORCFile(Optimized Row Columnar)
- 存储方式:数据按行分块 每块按照列存储。
- 压缩快、快速列存取,提高Hive的读取、写入和处理数据的性能。
- 效率比rcfile高,是rcfile的优化版本。
- 能够兼容多种计算引擎
Parquet
是一种列式数据存储格式,可以兼容多种计算引擎,如MapRedcue 和Spark等,对多层嵌套的数据结构提供了良好的性能支持,是目前Hive 生产环境中数据存储的主流选择之一。
相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。
数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。
ORCFILE 相比 RCFILE 可节省存储空间,在计算效率上多数场景RCFILE更优
注:存储压缩比例和数据内容相关,不同数据测试可能不同