Impala 处理Hadoop文件格式


教程概述

Impala支持Apache Hadoop中使用的几种熟悉的文件格式。

Impala可以加载和查询Spark等其他Hadoop组件生成的数据文件,其他组件也可以使用Impala生成的数据文件。

本教程介绍Impala中使用的文件格式的限制和性能注意事项。

文件格式

用于Impala表的文件格式具有显着的性能影响。某些文件格式包括压缩支持,这会影响磁盘上的数据大小,从而影响反序列化数据所需的I/O和CPU资源量。所需的I/O和CPU资源量可能是查询性能的限制因素,因为查询通常从移动和解压缩数据开始。

为了减少这部分流程的潜在影响,通常会压缩数据。通过压缩数据,较少的总字节数从磁盘传输到内存。这减少了传输数据所花费的时间,但在CPU解压缩内容时会发生折衷。

对于Impala无法写入的文件格式,尽可能从Impala内部创建表并使用其他组件(例如Hive或Spark)插入数据。具体文件格式见下表。

下表列出了Impala支持的文件格式。

文件类型

格式

压缩编解码器

是否支持Impala创建

是否支持Impala插入

Parquet

结构化的

Snappy、gzip、zstd、lz4;当前默认为Snappy

是的。

是:CREATETABLE,INSERT,LOADDATA,和查询。

ORC

结构化的

gzip、Snappy、LZO、LZ4;当前默认为gzip

是的,在Impala2.12.0及更高版本中。默认情况下,在Impala3.4.0及更高版本中启用ORC读取。要禁用,–enable_orc_scanner请false在启动集群时设置为。

不可以。通过LOADDATA使用格式正确的数据文件导入数据,或者INSERT在Hive中使用,然后在Impala中使用。REFRESHtable_name

Text

非结构化

bzip2、deflate、gzip、LZO、Snappy、zstd

是的。对于CREATETABLEwithnoSTOREDAS子句,默认文件格式是未压缩的文本,值由ASCII0x01字符分隔(通常表示为Ctrl-A)。

是的,如果未压缩。

没有如果压缩。

如果使用LZO压缩,则必须在Hive中创建表并加载数据。

如果使用其他类型的压缩,则必须通过LOADDATA、Hive或在HDFS中手动加载数据。

Avro

结构化的

Snappy,gzip,deflate

是的,在Impala1.4.0及更高版本中。在较低版本中,使用Hive创建表。

不可以。通过LOADDATA使用格式正确的数据文件导入数据,或者INSERT在Hive中使用,然后在Impala中使用。REFRESHtable_name

Hudi

结构化的

Snappy、gzip、zstd、lz4;当前默认为Snappy

是的,对读取优化查询的支持是实验性的。

否。在Impala中创建一个外部表。将表位置设置为Hudi表目录。或者,在Hive中创建Hudi表。

RCFile

结构化的

Snappy,gzip,deflate,bzip2

是的。

不可以。通过LOADDATA使用格式正确的数据文件导入数据,或者INSERT在Hive中使用,然后在Impala中使用。REFRESHtable_name

SequenceFile

结构化的

Snappy,gzip,deflate,bzip2

是的。

不可以。通过LOADDATA使用格式正确的数据文件导入数据,或者INSERT在Hive中使用,然后在Impala中使用。REFRESHtable_name

Impala支持以下压缩编解码器:

  • Snappy

推荐,因为它在压缩比和解压缩速度之间取得了有效的平衡。Snappy压缩速度非常快,但gzip可以节省更多空间。支持Impala2.0及更高版本中的文本、RC、序列和Avro文件。

  • Gzip

当需要实现最高级别的压缩(从而最大程度地节省磁盘空间)时推荐使用。在Impala2.0及更高版本中支持文本、RC、序列和Avro文件。

  • deflate

支持AVRO、RC、序列和文本文件。

  • Bzip2

在Impala2.0及更高版本中支持文本、RC和序列文件。

  • LZO

仅适用于文本文件。Impala可以查询LZO压缩的文本表,但目前无法创建它们或向其中插入数据。您需要在Hive中执行这些操作。

  • Zstd

仅适用于Parquet和文本文件。

  • LZ4

仅适用于Parquet文件。

选择表的文件格式

不同的文件格式和压缩编解码器适用于不同的数据集。为您的数据选择正确的格式可以提高性能。使用以下注意事项来决定对特定表使用哪种文件格式和压缩组合:

  • 如果您正在处理已采用受支持文件格式的现有文件,则在性能可接受的情况下,对Impala表使用相同的格式。如果原始格式不能产生可接受的查询性能或资源使用情况,请考虑创建一个具有不同文件格式或压缩特性的新Impala表,并通过将数据重写到新表来进行一次性转换。
  • 文本文件可以通过许多不同的工具方便地生成,并且是人类可读的,以便于验证和调试。这些特征就是为什么文本是ImpalaCREATETABLE语句的默认格式。但是,当性能和资源使用是主要考虑因素时,请使用包含元数据和内置压缩的结构化文件格式之一。典型的工作流可能涉及通过将CSV或TSV文件复制到适当的数据目录中,然后使用INSERT...SELECT语法将数据重写到使用不同的、更紧凑的文件格式的表中,从而将数据放入Impala表中。