首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Impala Schema 设计原则

使用本主题中的原则可以构建优化且可伸缩的Schema,并与现有的数据管理流程很好集成。

与基于文本的格式相比,首选二进制文件格式

为了节省空间并提高内存使用率和查询性能,请对任何大型或密集查询的表使用二进制文件格式。对于数据仓库样式的分析查询,Parquet文件格式是最有效的。Avro是Impala支持的另一种二进制文件格式,您可能已经将其作为Hadoop ETL管道的一部分。

尽管Impala可以使用RCFile和SequenceFile文件格式创建和查询表,但是由于这些格式的基于文本的性质,因此这类表相对较大,并且由于其面向行的布局,因此并未针对数据仓库样式的查询进行优化。使用这些文件格式的表,Impala不支持INSERT操作。

指导原则:

对于大型的和l性能至关重要的表,要获得有效且可扩展的格式,请使用Parquet文件格式。

为了在ETL过程中以其他Hadoop组件也可以使用的格式交付中间数据,Avro是一个合理的选择。

为了方便导入原始数据,请使用文本表而不是RCFile或SequenceFile,并在ETL过程的后期转换为Parquet。

在可行的地方使用Snappy压缩

Snappy压缩需要较低的CPU开销来进行解压缩,同时仍然可以节省大量空间。如果您可以选择压缩编解码器(例如Parquet和Avro文件格式),请使用Snappy压缩,除非您找到令人信服的理由使用其他编解码器。

和字符串相比,Impala更喜欢数字类型

如果你有数值,你可以把它当作字符串或数字(例如对于分区键字段YEAR,MONTH和DAY),将它们定义为最小的适用的整型。例如,YEAR可以是SMALLINT,MONTH和DAY可以TINYINT。尽管您可能看不到分区表或文本文件在磁盘上的布局方式有什么不同,但是在二进制文件格式(例如Parquet)中使用数字类型可以节省空间,以及在执行查询(尤其是联接之类的资源密集型查询)时节省内存的空间。

分区,但不要过度分区

分区是Impala性能调整的一个很重要的方面。为最大、最密集查询的表设置分区。

如果要从传统的数据库系统迁移到Impala,或者只是刚开始在Big Data领域中使用,则可能没有足够的数据量来利用现有的分区方案来利用Impala的并行查询。例如,如果你每天只有几十兆字节的数据,通过YEAR、MONTH和DAY字段进行分区可能过于精细。在针对一天的查询期间,你的集群的大多数时间可能处于空闲状态,或者每个节点可能要做的工作很少。考虑减少分区键字段的数量,以便每个分区目录包含几GB的数据。

例如,考虑一个Parquet表,其中每个数据文件是1个HDFS块,最大块大小为1 GB。(在Impala 2.0及更高版本中,默认的Parquet块大小减小为256 MB。对于本练习,假设您通过设置查询选项将大小增加到1 GB PARQUET_FILE_SIZE=1g。)如果您有一个10节点的集群,您需要10个数据文件(最大10 GB)才能让每个节点做一些查询工作。但是,每台计算机上的每个内核都可以并行处理一个单独的数据块。在单节点16核计算机的10节点群集上,一个查询可以完全并行处理高达160 GB的数据。如果每个分区只有几个数据文件,则不仅大多数群集节点在查询过程中都处于空闲状态,而且这些计算机上的大多数内核也是如此。

您可以将Parquet块大小减小到128 MB或64 MB以增加每个分区的文件数并改善并行性。但也可以考虑降低分区级别,以便分析查询具有足够的数据来处理。

加载数据后运行COMPUTE STATS

Impala广泛使用有关整个表和每一列中数据的统计信息,以帮助计划资源密集型操作,例如联接查询和插入分区的Parquet表中。因为此信息仅在数据加载后才可用,所以在表或分区中加载或替换数据后在表上运行该COMPUTE STATS语句。

具有准确的统计信息可以区分成功的操作或因内存不足错误或超时而失败的操作。当您遇到性能或容量问题时,请始终使用SHOW STATS语句检查查询中所有表的统计信息是否存在并且是最新的。

进行联接查询时,Impala将查询每个联接表的统计信息,以确定它们的相对大小并估计每个联接阶段中产生的记录数。在对Parquet表进行INSERT处理时,Impala将查阅源表的统计信息,以确定如何分配为每个分区构造数据文件的工作。

使用EXPLAIN和Summary验证合理的执行计划

在执行资源密集型查询之前,请使用该 EXPLAIN语句获得Impala打算如何并行化查询和分发工作的概述。如果发现查询计划效率低下,则可以执行调整步骤,例如更改文件格式、使用分区表、运行 COMPUTE STATS语句或添加查询提示。

运行查询后,可以在impala-shell中通过SUMMARY命令来查看与性能实际有关的信息,以及有关的实际运行方式。在Impala 1.4之前,您将使用该PROFILE命令,但是其高度技术性的输出仅对最有经验的用户有用。Impala 1.4中的新增功能SUMMARY总结了所有执行阶段,所有节点的最有用信息,而不是为每个节点拆分了数字。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201126A064EH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券