Apache Hive 支持几种熟知的Hadoop使用的文件格式,Hive也能加载并查询其他Hadoop组件创建的不同文件格式,如Pig或MapReduce。本文对比Hive不同文件格式,如:TextFile, SequenceFile, RCFile, AVRO, ORC,Parquet,Cloudera Impala也支持这些格式。在Apache Hive中不同文件格式和压缩编解码方式对不同的数据集产生效果差异明显,基于场景选择合适的文件格式非常重要,就如在ClickHouse中选择合适的存储引擎一样。下面分别介绍Hive支持的各类文件格式。
Hive Text File Format
Hive Text File Format是缺省的文件格式,可以使用该格式与其他客户端应用传输数据。文本文件格式为大多数应用支持,数据按行存储,每一行代表一条记录,每行以回车符(\n)结束。
文本文件是简单平面文件格式,可以使用BZIP2进行压缩减少存储空间。Hive创建表命令可以使用STORED AS TEXTFILE
支持存储格式,示例语法如下:
Create table textfile_table
(column_specs)
stored as textfile;
Hive Sequence File Format
Sequence文件格式是Hadoop支持的平面文件,数据存储为二进制键值对格式。这些文件是二进制格式、且能够分割,主要优势可以合并两个或多个文件为一个文件。
在Hive中创建顺序文件表可以通过增加存储选项实现:STORED AS SEQUENCEFILE
。下面是示例语法:
Create table sequencefile_table
(column_specs)
stored as sequencefile;
Hive RC File Format
RC 文件格式是行列文件格式,是Hive提供高行级压缩率的另一个文件格式。如果需要一次性执行多行,可以使用RCFile格式。
RCFile格式与顺序文件格式非常类似,也按照键值对方式存储数据。Hive创建RCFile表时可以指定STORED AS RCFILE
选项。示例语法如下:
Create table RCfile_table
(column_specs)
stored as rcfile;
Hive AVRO File Format
AVRO是为Hadoop提供数据序列化和数据交换服务的开源项目,它可以用于在Hadoop生态与任何编程语言编写的应用之间交换数据。Avro是基于Hadoop应用最受欢迎的文件格式。
创建Hive AVRO表可以指定STORED AS AVRO
选项:
Create table avro_table
(column_specs)
stored as avro;
Hive ORC File Format
ORC( Optimized Row Columnar )文件格式提供了更有效方式存储Hive表数据。这个文件系统实际上就是为了克服其他Hive文件格式的限制特性而设计的。当Hive从大表中读取、写入和处理数据时,使用ORC文件可以提高性能。
创建Hive ORC表可以指定STORED AS ORC
选项:
Create table orc_table
(column_specs)
stored as orc;
Hive Parquet File Format
Parquet是面向类二进制文件格式,对于大规模查询应用非常高效,尤其是查询表中特定列数据,且能够使用 Snappy, gzip方式进行压缩,缺省为Snappy。关于parquet文件格式的优势可以参考:基于R语言理解Parquet文件格式
创建Hive Parquet表可以指定STORED AS ORC
选项:
Create table parquet_table
(column_specs)
stored as parquet;
总结
本文介绍了Hive中支持的不同文件格式,了解并选择合适的文件格式对于大数据类应用非常重要。