大数据集选择合适的分区粒度分区是什么?(二)

Impala 性能调优最佳实践概述 1 选择适当的文件格式

通常对于大型数据集(每个分区或表大小为数 GB 或更大),建议使用 Parquet 文件格式。因为是分列存储,word IO可以请求更多的数据,而且支持更好的压缩算法来压缩二进制文件。

对于小型表(每个分区或表大小小于几 GB 或更小),不同存储格式之间没有显着的性能差异。在小数据量下,可以通过减少并行执行的机会(使用压缩文件格式)来减少 I/O。在规划生产部署或执行基准测试时,请始终使用实际数据量来了解性能和可扩展性的真实情况。

2 避免在数据处理过程中产生过多的小文件

对于外部存储数据,通常的格式是文本格式或Avro格式,这样就可以逐行构造数据文件。一旦将数据加载到 Impala 中的表中,就可以将其转换为更高效的 Parquet 格式,并使用单个 INSERT…SELECT 语句拆分为多个数据文件。

图片[1]-大数据集选择合适的分区粒度分区是什么?(二)-唐朝资源网

使用 insert…select 将数据从一个表复制到另一个表。避免使用insert…values为影响性能的大数据或关键表插入数据,因为每个这样的insert语句都会生成一个小文件。

如果在数据处理过程中产生了上千个小文件,需要使用insert…select将数据复制到另一个表中,这样也解决了复制过程中小文件过多的问题。

3选择合适的分区粒度

分区是一种根据一个或多个列的值对数据进行物理划分的技术,例如按年、月、日、地区、城市等。当查询指定特定的分区列或分区范围时列,Impala 可以避免读取不相关的数据,从而显着节省磁盘 I/O。

在确定分区列时,选择合适的分区粒度。例如,是按年、月、日还是仅按年和月进行分区。选择分区的策略是保证每个分区的数据至少为 256 MB,这样可以更好地利用 HDFS 的 IO 批处理性能和 Impala 的分布式查询。

过度分区也可能导致查询计划花费比必要时间更长的时间,因为 Impala 会修剪不必要的分区。理想情况下,表中的分区数保持在 30,000 以下。

为每个分区目录准备数据文件时,应该使用几个大文件而不是许多小文件。如果现有的数据原本是很多小文件的形式impala可以限制条件删数据么,并且无法控制文件的格式,那么建议使用 INSERT…SELECT 语法将数据从一个表或分区复制到另一个表或分割。此操作将合并文件以减少文件数量。

如果一个parquet表包含数千个分区,每个分区的数据小于1Gimpala可以限制条件删数据么,则需要使用更大的分区粒度。只有分区粒度使文件大小合适,才能充分利用 HDFS 的 IO 批处理性能和 Impala 中的分布式查询。

4 对分区键列使用最小的适当整数类型

一般来说,人们更喜欢使用字符串作为分区键列,因为这些值变成了HDFS目录名。不过建议使用数值作为分区键,比如年、月、日,这样可以减少内存占用。通常,月和日的数据类型为 TINYINT,年为 SMALLINT 类型。使用 EXTRACT() 函数从 TIMESTAMP 值中提取单个日期和时间字段,并使用 CAST() 函数将返回值转换为适当的整数类型。

5选择合适的 Parquet 块大小

默认情况下,通过 INSERT…SELECT 语句创建的 Parquet 文件的块大小为 256 MB。 (此默认值在 Impala 2.0 中已更改。以前限制为 1 GB,但 Impala 对压缩进行了保守估计,导致文件小于 1 GB。)

6收集统计数据

使用计算统计信息收集有关联接查询中的海量数据表或影响性能的关键表的统计信息。

7 最小化将结果发送回客户端的开销

考虑以下技术:

(1)聚合。如果需要计算满足条件的记录行数,求匹配行中某列的总和、最大值、最小值等,不要发整个结果集由客户端发给客户端客户端应用程序可以处理这些数据,但是可以调用COUNT()、SUM()、MAX()等聚合函数来处理,如果将整个未聚合的数据集发送给客户端,只需将数据发送到客户端此操作需要大量网络开销。

(2)过滤。使用不同的谓词条件尽可能减小结果集的大小,而不是将整个结果集发送给处理过滤逻辑的应用程序。使用WHERE查询子句在所有适用的测试中,以消除不相关的行,而不是生成大型结果集并使用应用程序逻辑对其进行过滤。

(3)LIMIT 子句。如果只需要查看结果集中的几个样本数据,或者使用 ORDER BY 后查询最大值或最小值,可以使用 LIMIT 子句最大化减少结果集的大小。

(4)避免美化结果集的输出:通过impala-shell查询数据时,可以指定-B和–output_delimiter选项输出原始结果集,而不用impala改变输出格式美化,或者直接将结果集重定向到文件中。在上述情况下,也可以考虑使用INSERT … SELECT将结果直接写入HDFS。

8 检查查询计划

在实际运行查询之前,使用explain查看执行计划是否以高效合理的方式运行

9 查看查询的性能特征

运行查询后,使用profile命令查看IO、内存消耗、网络带宽使用、CPU使用等信息是否在预期范围内。

10 使用适当的操作系统设置

有关影响 Impala 性能的操作系统设置,请参阅 Apache Hadoop 发行版的文档。例如,将 vm.swappiness 设置为非零值可以提高整体性能。

© 版权声明
THE END
喜欢就支持一下吧
点赞173赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容