在进行任何概念验证工作,移植练习或部署到生产之前,请将这些指南用作check list。
1、Prefer binary file formats over text-based formats.
- 要节省空间并提高内存使用率和查询性能,请对任何大型或集中查询的表使用二进制文件格式。 Parquet文件格式对于数据仓库式分析查询最有效。 Avro是Impala支持的另一种二进制文件格式,您可能已将其作为Hadoop ETL管道的一部分。
- 虽然Impala可以使用RCFile和SequenceFile文件格式创建和查询表,但由于这些格式的基于文本的特性,这些表相对较笨,并且由于其面向行的布局而未针对数据仓库样式查询进行优化。 Impala不支持对具有这些文件格式的表执行INSERT操作。
- Guidelines
- 1、对于大型,性能关键表的高效且可扩展的格式,请使用Parquet文件格式。
- 2、为了在ETL过程中以其他Hadoop组件也可以使用的格式提供中间数据,Avro是一个合理的选择。
- 3、为方便导入原始数据,请使用文本表而不是RCFile或SequenceFile,并在ETL过程的后续阶段转换为Parquet。
2、Use Snappy compression where practical.
Snappy压缩涉及较低的CPU开销以进行解压缩,同时仍可节省大量空间。如果您可以选择压缩编解码器(例如Parquet和Avro文件格式),请使用Snappy压缩,除非您找到使用其他编解码器的令人信服的理由。
3、Prefer numeric types over strings.
如果您有可以视为字符串或数字的数值(例如分区键列的YEAR,MONTH和DAY),请将它们定义为最小的适用整数类型。例如,YEAR可以是SMALLINT,MONTH和DAY可以是TINYINT。虽然您可能没有看到分区表或文本文件在磁盘上的布局方式有任何差异,但使用数字类型将以二进制格式(如Parquet)节省空间,并在执行查询时节省内存,尤其是资源密集型查询(如连接).
4、Partition, but don't over-partition
您可以将Parquet块大小减小到128 MB或64 MB,以增加每个分区的文件数并提高并行度。但也要考虑降低分区级别,以便分析查询有足够的数据可以使用。
5、Always compute stats after loading data.
- Impala广泛使用有关整个表和每列中的数据的统计信息,以帮助规划资源密集型操作,例如连接查询和插入分区的Parquet表。由于此信息仅在加载数据后可用,因此在加载或替换表或分区中的数据后,在表上运行COMPUTE STATS语句。
- 具有准确的统计信息可以区分成功的操作,或者由于内存不足或超时而失败的操作。遇到性能或容量问题时,请始终使用SHOW STATS语句检查查询中的所有表是否存在统计信息并保持最新。
- 在执行连接查询时,Impala会查询每个连接表的统计信息,以确定它们的相对大小并估计每个连接阶段中生成的行数。在对Parquet表执行INSERT时,Impala会查询源表的统计信息,以确定如何分配为每个分区构建数据文件的工作。
6、Verify sensible execution plans with EXPLAIN and SUMMARY.(使用EXPLAIN和SUMMARY验证合理的执行计划。)
- 在执行资源密集型查询之前,请使用EXPLAIN语句概述Impala如何并行化查询并分发工作。如果您发现查询计划效率低下,则可以执行调整步骤,例如更改文件格式,使用分区表,运行COMPUTE STATS语句或添加查询提示。有关所有这些技术的信息,请参阅Tuning Impala for Performance.
。