一、Hive支持哪些文件存储格式?

Hive支持的文件储存格式主要有: TextFile、SequenceFile、ORC、Parquet

TextFile格式: Hive默认格式,数据默认不做压缩,并且磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用。

SequenceFile格式: 序列化文件,将数据以二进制格式编码,并且进行压缩,下载后不能直接查看,无法可视化。

Parquet格式: Parquet文件是以二进制方式存储的,不可以直接读取和修改,Parquet文件是自解析的,文件中包括该文件的数据和元数据。

ORC格式: 和Parquet类似,也是以二进制方式存储的,不可以直接读取和修改,也是自解析的,包含很多元数据,这些元数据都是同构 ProtoBuffer 进行序列化的。

其中TextFile、SequenceFile为行式存储, ORC、Parquet为列式存储。

二、ORC和Parquet有什么区别?

ORC和Parquet是两种不同的列式存储文件格式,他们的区别如下:

1.压缩比率: ORC通常比Parquet具有更高的压缩比率,因为他使用了更先进的压缩算法,如Snappy、LZO、Zlib等。    但这也导致ORC在写入时需要更高的CPU消耗。

2.读取速度: Parquet通常比ORC读取地更快,因为Parquet采用更简单和更快速的压缩算法。    但在查询和过滤性方面,ORC可能更好一点,因为它支持更复杂的谓词下推和向量化处理。

3.使用场景: ORC通常在需要高度压缩和低延迟的场景下使用,如交互式分析和实时报告。    而Parquet适用于需要高吞吐量和可伸缩性的场景,如数据仓库和批量ETL作业。

4.支持的数据类型: ORC支持较多种类的数据类型,包括Map和Array等复杂的数据类型,而Parquet支持的数据类型较少,适用于简单的数据类型。

5.支持的生态系统: Parquet被广泛地支持和采用,如sprak、hadoop、hive;ORC相对较少得到支持,只有一些特定的工具和平台使用它,如hive。

综上所述,选择ORC还是Parquet取决于具体的应用场景和需求,需要权衡数据大小、读写速度以及压缩率等因素。

三、 ORC、Parquet 等列式存储的优点

ORC和Parquet都是高性能的存储方式,这两种存储格式会带来存储和性能上的提升。

Parquet:

1.Parquet文件是以二进制文件存储的,不可以直接读取和修改,Parquet文件是自解析的,文件中包含该文件的数据和元数据。

2.Parquet中没有Map、Array这样的复杂数据类型、但可以通过repeated和group组合来实现。

3.Parquet支持嵌套的数据模型,类似于Protocol Buffers,每一个数据模型的schema包含多个字段,每一个字段有三个属性:重复次数、数据类型和字段名。

重复次数可以是以下三种:required(只出现1次)、repeated(出现0次或多次)、optional(出现0次或1次)。

每个字段的数据类型可以分为两种:group(复杂类型)、primitive(基本类型)

4.由于Parquet支持的数据模型比较松散,可能一条记录中存在比较深的嵌套关系,如果为每一条记录都维护一个类似的树状结构可能会占用较大的存储空间,因此Dremel论文中提出了一种高效的对于嵌套数据格式的压缩算法:Striping/Assembly算法。通过Striping/Assembly算法,Parquet可以使用较少的存储空间表示复杂的嵌套格式,并且通常Repetition level 和 Definition level 都是较小的整数值,可以通过 RLE 算法对其进行压缩,进一步降低存储空间。

ORC:

1.ORC和Parquet类似,以二进制方式存储,不可以直接读取和修改,也是自解析的,它包含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的。

2.ORC文件是自描述的,它的元数据使用Protocol Buffers 序列化,并且文件中的数据会尽可能的压缩来降低存储空间的消耗。

3.ORC会尽可能合并多个离散的区间,尽可能地减少I/O次数。

4.ORC中使用了更加精确的索引信息,使得在读取数据时可以指定从任意一行开始读取,更细粒度的统计信息使得读取 ORC文件 跳过整个row group,ORC默认会对任何一块数据和索引信息使用Zlib压缩,因此ORC文件占用的存储空间也更小。

四、实际生产中Hive一般用什么文件格式和压缩方式?

文件格式:TextFile格式(文本文件)、ORC格式(ORC文件)、Parquet格式

压缩方式:Snappy压缩(速度快、但无法切分)、Gzip压缩

根据性能测试总结:

从存储文件的压缩比来看,ORC和Parquet文件格式占用的空间相对而言要小得多。 从存储文件的查询速度看,当表数据量较大时Parquet文件格式查询耗时相对而言要小得多。

实际情况:

根据目前主流的做法来看,Hive中选用ORC和Parquet文件格式似乎更好一点,但是为什么Hive默认的文件存储格式是TextFile?

这是因为大多数情况下源数据文件都是以text文件格式保存(便于查看验数和防止乱码),这样TextFile文件格式的Hive表能直接load data数据。

如果说我们想使用ORC文件或者Parquet文件格式的表数据,可以先通过TextFile表加载后再insert到指定文件存储格式的表中。而这些不同文件格式的表我们可以通过数据分层保存,便于后期进行数据统计。

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。