大数据系统常用文件存储格式File format

常见的文件存储格式有行式存储,列式存储和混合式存储。在大数据系统中,列式存储和混合式存储更常见。对于HDFS这样的文件存储系统来说,其实并不关心存储的是什么形式的存储文件。只是在解析数据时,需要知道是什么类型的文件。例如Hive对RCFile和ORCFile的支持就在于,Hive知道这两种文件中数据的存储方式,并正确地解析数据并查询。

1,行式存储

广泛使用于主流关系型数据库及HDFS中。优势是当需要按行遍历时效率很高。缺点是当不需要所有字段时也需要读取所有字段,浪费IO和内存,以及整行压缩效率较低。

行式存储很像是按序在磁盘写入数据流,达到数据页面上限时开始写入下个数据页面。为了表达数据的前后关系,数据页面之间用指针相连。

2,列式存储

简单的列式存储是将数据按所有列进行垂直划分,每一列数据连续存储在一起。当需要所有列时,使用指针将不同的列拼合在一起。这样做解决了行式存储的问题,但其缺点也很明显:典型的MR经常需要遍历数据,且block经常存储在不同的node上,因此拼合会导致大量的网络传输。实际中更多使用的是column-family,即将几个经常同时使用的列分为一组并连续存储,成为一个colmun-family;一行数据被拆分成少量的几个column-family。

Redshift采用column storage,即简单的列式存储。HBase底层的HDFS采用column-family存储。

3,混合存储

column-family还是会导致一些网络传输,而混合式存储则能更好的处理这个问题。混合式存储首先将记录表按照行进行分组,若干行划分为一组(row group)。而对于每组内的所有记录,在实际存储时将同一列内容连续存储在一起。这样一方面保证同一行的字段一定在同一台机器上,另一方面向列式存储一样按列存储,可以避免读取无关列的数据,也可以对不同的列应用不同的压缩算法。

Hive支持将表数据以RCFile/ORCFile的形式存储,也支持对格式为RCFile/ORCFile的数据加上schema后直接查询或管理。

RCFile(Record Columner File)

HDFS每个block可以保存多个row group。对于每个row group,内容分为:sync信息,表示row group的开始;metadata,记录该row group保存了多少行记录;最后是实际数据。

ORCFile(Optimized Row Columnar File)

ORCFile包含若干数据行组,每个数据行组称为数据带(Stripe)。每个Stripe由三部分构成:index data记录该Stripe中每列的最大值最小值等统计信息,用于查询时提高效率;文件尾记录Stripe的元数据,比如该Stripe包含的记录个数;以及raw data本身。总之ORCFile相比RCFile增加了index和统计信息,以提高查询效率。

 

你可能感兴趣的:(大数据系统常用文件存储格式File format)