在较常见的文件存储格式有有:TestFile、SequenceFile、RcFile、ORC、Parquet、AVRO。默认的文件存储格式是TestFile,在建表时如果不指定默认为这个格式,那么导入数据时会直接把数据文件拷贝到hdfs上不进行处理。除TestFile外的其他格式的表不能直接从本地文件导入数据,数据要先导入到TestFile格式的表中,然后再从表中用insert导入到其他格式的表中。
存储格式概述
1. TestFile格式
在建表时无具体的格式指定,则默认是Hive的文件格式,文件存储方式为正常的文本格式。在以TestFile文件格式存储的表,在HDFS上可直接查看到数据。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但是使用这种方式,hive不会对数据进行切分,无法对数据进行并行操作。
存储方式:行存储
2. SequenceFile格式
需在建表时指定stored as sequecefile,文件存储方式为二进制文件,以<key,value>的形式序列化到文件中。以SequenceFile文件格式存储的表,会对数据进行压缩处理,在HDFS上的数据为二进制格式,不可直接查看。可与record、none、block(块级别压缩)配合使用,默认为record,但record的压缩率低,一般建议使用block压缩。
存储方式:行存储
3. RcFile格式
RcFile需在建表时指定stored as rcfile,文件存储方式为二进制文件。以RcFile文件格式存储的表也会对数据进行压缩处理,在HDFS上以二进制格式存储,不可直接查看。作为一种行列存储相结合的存储方式,该存储结构遵循的是“先水平划分,再垂直划分”的设计理念。
首先,将数据按行分块形成行组,这样可以使同一行的数据在一个节点上。然后,把行组内的数据按列式存储,将列维度的数据进行压缩,并提供了一种lazy解压技术。在进行数据读取时会顺序处理HDFS块中的每个行组,读取行组的元数据头部和给定查询需要的列后,将其加载到内存中并进行解压,直到处理下一个行组。但是,RcFile不会解压所有的加载列,解压采用lazy解压技术时,只有满足where条件的列才会被解压,这在一定程度上减少了不必要的列解压。
存储方式:行列混合的存储格式,将相近的行分块后,每块按列存储。
4. ORC格式
需在建表时指定stored as orc,文件存储方式为二进制文件。ORC文件格式从hive0.11版本后提供,是RcFile格式的优化版,主要在压缩编码,查询性能方面做了优化。ORC具备一些高级特性,如:update操作,支持ACID,支持struct、array复杂类型。Hive1.x版本后支持事务和update操作,是基于ORC实现的(目前其他存储格式暂不支持)。
存储方式:按行组分割整个表,行组内进行列式存储。
5. Parquet格式
需在建表时指定stored as parquet,文件存储方式为二进制文件。Parquet基于dremel的数据模型和算法实现,只是一种存储格式,它与上层平台、语言无关,不需要与任何数据处理框架绑定,适配多种框架结构。
存储方式:列式存储
小结
需要查看到所存储的具体数据内容的小型查询,可以采用默认文件格式textfile。不需要查看具体数据的小型查询时可使用Sequencefile文件格式。当用于大数据量的查询时,可以使用Rcfile、ORC、Parquet,一般情况下推荐使用ORC,若字段数较多,不涉及到更新且取部分列查询场景多的情况下建议使用Parquet。
在较常见的文件存储格式有有:TestFile、SequenceFile、RcFile、ORC、Parquet、AVRO。默认的文件存储格式是TestFile,在建表时如果不指定默认为这个格式,那么导入数据时会直接把数据文件拷贝到hdfs上不进行处理。除TestFile外的其他格式的表不能直接从本地文件导入数据,数据要先导入到TestFile格式的表中,然后再从表中用insert导入到其他格式的表中。
存储格式概述
1. TestFile格式
在建表时无具体的格式指定,则默认是Hive的文件格式,文件存储方式为正常的文本格式。在以TestFile文件格式存储的表,在HDFS上可直接查看到数据。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但是使用这种方式,hive不会对数据进行切分,无法对数据进行并行操作。
存储方式:行存储
2. SequenceFile格式
需在建表时指定stored as sequecefile,文件存储方式为二进制文件,以<key,value>的形式序列化到文件中。以SequenceFile文件格式存储的表,会对数据进行压缩处理,在HDFS上的数据为二进制格式,不可直接查看。可与record、none、block(块级别压缩)配合使用,默认为record,但record的压缩率低,一般建议使用block压缩。
存储方式:行存储
3. RcFile格式
RcFile需在建表时指定stored as rcfile,文件存储方式为二进制文件。以RcFile文件格式存储的表也会对数据进行压缩处理,在HDFS上以二进制格式存储,不可直接查看。作为一种行列存储相结合的存储方式,该存储结构遵循的是“先水平划分,再垂直划分”的设计理念。
首先,将数据按行分块形成行组,这样可以使同一行的数据在一个节点上。然后,把行组内的数据按列式存储,将列维度的数据进行压缩,并提供了一种lazy解压技术。在进行数据读取时会顺序处理HDFS块中的每个行组,读取行组的元数据头部和给定查询需要的列后,将其加载到内存中并进行解压,直到处理下一个行组。但是,RcFile不会解压所有的加载列,解压采用lazy解压技术时,只有满足where条件的列才会被解压,这在一定程度上减少了不必要的列解压。
存储方式:行列混合的存储格式,将相近的行分块后,每块按列存储。
4. ORC格式
需在建表时指定stored as orc,文件存储方式为二进制文件。ORC文件格式从hive0.11版本后提供,是RcFile格式的优化版,主要在压缩编码,查询性能方面做了优化。ORC具备一些高级特性,如:update操作,支持ACID,支持struct、array复杂类型。Hive1.x版本后支持事务和update操作,是基于ORC实现的(目前其他存储格式暂不支持)。
存储方式:按行组分割整个表,行组内进行列式存储。
5. Parquet格式
需在建表时指定stored as parquet,文件存储方式为二进制文件。Parquet基于dremel的数据模型和算法实现,只是一种存储格式,它与上层平台、语言无关,不需要与任何数据处理框架绑定,适配多种框架结构。
存储方式:列式存储
小结
需要查看到所存储的具体数据内容的小型查询,可以采用默认文件格式textfile。不需要查看具体数据的小型查询时可使用Sequencefile文件格式。当用于大数据量的查询时,可以使用Rcfile、ORC、Parquet,一般情况下推荐使用ORC,若字段数较多,不涉及到更新且取部分列查询场景多的情况下建议使用Parquet。