释放数据效率:探索Hive表存储格式 - ORC与Text File的对比

1、hive表存储格式介绍

  1. 文本文件(Text File):文本文件是Hadoop最基本的存储格式,以文本形式存储数据,每行记录都是一个文本字符串。优势是易于理解和处理,适用于简单的数据分析任务。

  2. 列式存储(Columnar Storage):列式存储将每个列的数据存储在一起,相同列的数据连续存储。它提供了更高的压缩率和查询性能,特别适合于分析型查询。常见的列式存储格式包括Parquet和ORC。

    • Parquet:Parquet是一种优化的列式存储格式,它支持高效的压缩和列裁剪(Column Pruning),以减少I/O和提高查询性能。它适用于大规模数据分析和数据仓库场景。

    • ORC(Optimized Row Columnar):ORC是另一种优化的列式存储格式,它结合了行式存储和列式存储的优点,提供了更高的压缩率和查询性能。它适用于Hive中大型表和复杂查询的性能优化。

  3. Avro:Avro是一种数据序列化系统,可以将数据结构以JSON格式进行存储。它支持动态模式演化和数据压缩,并且适用于数据交换和存储的场景。

  4. RCFile(Record Columnar File):RCFile是一种将数据按照记录和列进行组织的混合存储格式。它提供了更好的数据压缩比和查询性能,并且适用于Hive中的大规模数据处理。

  每种存储格式都有其优势和适用场景。例如,文本文件格式易于理解和处理,适用于简单的数据分析。而列式存储格式(如Parquet和ORC)可以提供更高的压缩率和查询性能,适用于大规模数据分析和数据仓库。Avro提供了动态模式演化和数据压缩的能力,适用于数据交换和存储。RCFile则是混合存储格式,提供了较好的压缩比和查询性能。选择适当的存储格式取决于具体的数据特点、查询需求和性能要求。

2、如何创建表并指定存储格式

在Hive中,默认的表格式是文本文件格式(Text File)。当你使用Hive创建表时,如果没有显式指定表的存储格式,Hive将默认使用文本文件格式存储数据。

如果你想指定其他格式来创建表,可以通过以下方式进行设置:

  • 使用存储格式属性(STORED AS):在创建表的语句中,可以使用STORED AS子句来指定所需的存储格式。Hive支持多种存储格式,如Parquet、ORC、Avro等。例如,要将表存储为Parquet格式,可以使用以下语法:
CREATE TABLE table_name
...
STORED AS Parquet;
  • 使用表属性(TBLPROPERTIES):你还可以使用表属性来指定存储格式。表属性是键值对的形式,用于在创建表时指定额外的选项。可以使用tblproperties关键字并指定存储格式属性(如'stored-as')和相应的值(如'parquet')来设置存储格式。例如:

CREATE TABLE table_name
...
TBLPROPERTIES ('stored-as' = 'parquet');

  需要注意的是,使用特定的存储格式需要确保对应的存储格式插件在Hive环境中可用。你可能需要安装和配置相应的插件才能使用某些存储格式。

  此外,你还可以通过修改Hive的默认存储格式配置来更改Hive创建表的默认存储格式。可以在Hive的配置文件中(如hive-site.xml)设置相关属性,如hive.default.fileformat,并将其值设置为所需的存储格式(如Parquet)。

  总结起来,Hive默认创建的表使用文本文件格式存储数据。你可以使用STORED AS子句或表属性(TBLPROPERTIES)来指定其他存储格式,如Parquet、ORC、Avro等。同时,你也可以通过修改Hive的默认存储格式配置来更改默认的存储格式。

3、Text File和ORC的两种存储方式的对比

3.1、ORC存储格式架构图:

+-----------------------------------------------------------------+
|                            ORC File                              |
+-----------------------------------------------------------------+
| File Header                                                     |
|-----------------------------------------------------------------|
| Postscript                                                      |
|-----------------------------------------------------------------|
| File Footer                                                     |
|-----------------------------------------------------------------|
| Stripes                                                         |
|  +------------------------------------------------------------+ |
|  |                           Stripe                           | |
|  +------------------------------------------------------------+ |
|  | Stripe Footer                 |  Stripe Data               | |
|  |-------------------------------|---------------------------| |
|  | Column Indexes                |  Column Data               | |
|  |                               |  (compressed)              | |
|  +------------------------------------------------------------+ |
|  | Stripe Footer                 |  Stripe Data               | |
|  |-------------------------------|---------------------------| |
|  | Column Indexes                |  Column Data               | |
|  |                               |  (compressed)              | |
|  +------------------------------------------------------------+ |
|                   ...                                           |
|-----------------------------------------------------------------|
| File Metadata                                                   |
+-----------------------------------------------------------------+

上述架构图详细描述了ORC(Optimized Row Columnar)存储格式的组成部分:

  1. File Header(文件头):包含ORC文件的基本元数据和文件版本信息。

  2. Postscript(文件后缀):包含一些文件相关的参数,如压缩算法、压缩块大小等。

  3. File Footer(文件尾部):包含ORC文件的元数据,如Schema定义、统计信息等。

  4. Stripes(数据条带):ORC文件被分成多个条带,每个条带都是独立的数据单元。

  5. Stripe(条带):每个条带由Stripe Footer和Stripe Data组成。

    • Stripe Footer(条带尾部):包含当前条带的元数据,如列偏移量、压缩信息和索引信息。

    • Stripe Data(条带数据):包含列数据和相关索引。列数据可以使用压缩算法进行压缩。

  6. Column Indexes(列索引):每个条带都有自己的列索引,用于快速定位和访问数据。列索引包含有关列值的统计信息和位置信息。

  7. Column Data(列数据):存储了实际的列值数据。列数据可以使用适用的压缩算法进行压缩。

  8. File Metadata(文件元数据):存储了整个ORC文件的元数据信息,如列名、类型、统计信息和Schema等。

这些组成部分共同构成了ORC文件的结构。ORC存储格式利用列式存储、压缩算法、索引和元数据信息等技术,以提高数据存储效率和查询性能。

3.2、Text File vs ORC

  ORC在压缩比和查询性能方面提供了显著的优势。

  1. 压缩比: ORC格式在存储数据时采用了多种压缩算法和技术,以减小数据的存储空间。相比之下,Text File格式以纯文本形式存储数据,没有内建的压缩功能。由于ORC采用列式存储,它可以应用列级别的压缩,例如使用字典编码、位图编码和使用基于列值统计的压缩算法。这些技术可以显著减小存储空间,从而提供更高的压缩比,尤其在大型数据集上效果更为明显。

  2. 查询性能: ORC格式在查询性能方面也具有优势。由于ORC以列存储的方式组织数据,它可以仅读取查询所需的列,而不需要读取整个行。这种列裁剪(Column Pruning)减少了磁盘读取量,提高了查询的效率。此外,ORC还支持谓词下推(Predicate Pushdown),将过滤操作下推到存储层级,减少了需要加载到内存的数据量,进一步提高了查询性能。另外,ORC使用索引和统计信息来加速元数据和数据的读取,优化了查询计划的生成和执行。

  综合来说,ORC相对于Text File格式在存储空间和查询性能方面都提供了显著的改进。它可以通过更高的压缩比减小存储需求,并通过列存储和压缩算法提高查询性能。尤其在大型数据集和复杂查询场景下,ORC格式的优势更加明显,可以提供更高效的数据存储和查询分析能力。

 

posted @ 2023-06-10 15:37  LUDAGOGO  阅读(1854)  评论(0)    收藏  举报