Redshift Spectrum 的性能问题
Performance issues with Redshift Spectrum
我正在使用 Redhshift 频谱。我创建了一个外部 table 并在 S3 上上传了一个包含大约 550 万条记录的 csv 数据文件。如果在此外部 table 上触发查询,则需要大约 15 秒,而如果我 运行 在 Amazon redshift 上执行相同的查询,我将在大约 2 秒内得到相同的结果。 AWS 声称它是非常高性能的平台,导致这种性能滞后的原因可能是什么。请建议使用频谱实现相同性能的解决方案。
为了您的性能优化,请have a look理解您的查询。
目前,最好的性能是如果您没有单个 CSV 文件而是多个文件。通常,如果每个查询的文件数至少比集群的节点数大一个数量级,您可以说您获得了出色的性能。
此外,如果您使用 Parquet 文件,您将在 S3 上获得柱状格式的优势,而不是读取 CSV,CSV 将从 S3 读取整个文件 - 并降低您的成本。
您可以使用 script 将数据转换为 Parquet:
这些结果是意料之中的。使用 Amazon Redshift 的全部原因是它以高度优化的方式存储数据以提供快速查询。存储在 Redshift 之外的数据不会运行 任何地方都快。
Amazon Redshift Spectrum 的目的是提供对存储在 Amazon S3 中的数据的访问,而无需将其加载到 Redshift(类似于 Amazon Athena)中,但它不提供性能保证。
我来晚了回答这个问题。截至 2018 年 2 月,AWS 支持对 Parquet、ORC 等列格式文件的 AWS Spectrum 查询。在您的情况下,您将文件存储为 .CSV。 CSV 是基于行的,这会导致为查询的任何字段提取整行。我建议您在查询之前将文件从 .csv 格式转换为 Parquet 格式。这肯定会带来更快的性能。来自 AWS 的详细信息:Amazon Redshift Spectrum
AWS论坛回复如下:
我了解到您对 Redshift 和 Redshift Spectrum 有相同的查询 运行ning。但是,结果不同,一个 运行 在 2 秒内,另一个 运行 在大约 15 秒内。
首先,我们必须承认,Redshift 和 Spectrum 都是针对不同目的而设计的不同服务。它们的内部结构彼此差异很大,而 Redshift 依赖于 EBS 存储,而 Spectrum 直接与 S3 一起工作。 Redshift Spectrum 的查询采用大规模并行机制来非常快速地对大型数据集执行。大部分处理发生在 Redshift Spectrum 层,大部分数据保留在 Amazon S3 中。
Spectrum 还设计用于处理 PB 级结构化数据和来自 Amazon S3 中文件的 semi-structured 数据,而无需将数据加载到 Amazon Redshift 表中,而 Redshift 使您能够高效地存储数据highly-optimez 通过分发和排序键的方式。
AWS 并未宣传 Spectrum 是 Redshift 的更快替代品。我们提供 Amazon Redshift Spectrum 作为 add-on 解决方案,无需将数据加载到 Redshift(类似于 Amazon Athena)即可访问存储在 Amazon S3 中的数据。
在查询性能方面,不幸的是,我们无法保证性能的提升,因为 Redshift Spectrum 层生成的查询计划与 Redshift 的数据库引擎解释器生成的查询计划完全不同。这个特殊原因本身就足以阻止这些服务之间进行任何查询性能比较,因为这对它们都不公平。
关于您关于动态节点的问题,Spectrum 根据您的查询需求添加它们,Redshift Spectrum 可能会使用数千个实例来利用大规模并行处理。没有任何特定的条件来触发此行为,但是请记住,通过遵循有关如何提高查询性能 [1] 以及如何为查询创建数据文件 [2] 的最佳实践,您可以潜在地改善整体 Spectrum 的性能。
最后,我想指出一些有趣的文档,以进一步阐明如何实现更好的性能改进。参考文献见文末!
我正在使用 Redhshift 频谱。我创建了一个外部 table 并在 S3 上上传了一个包含大约 550 万条记录的 csv 数据文件。如果在此外部 table 上触发查询,则需要大约 15 秒,而如果我 运行 在 Amazon redshift 上执行相同的查询,我将在大约 2 秒内得到相同的结果。 AWS 声称它是非常高性能的平台,导致这种性能滞后的原因可能是什么。请建议使用频谱实现相同性能的解决方案。
为了您的性能优化,请have a look理解您的查询。
目前,最好的性能是如果您没有单个 CSV 文件而是多个文件。通常,如果每个查询的文件数至少比集群的节点数大一个数量级,您可以说您获得了出色的性能。
此外,如果您使用 Parquet 文件,您将在 S3 上获得柱状格式的优势,而不是读取 CSV,CSV 将从 S3 读取整个文件 - 并降低您的成本。
您可以使用 script 将数据转换为 Parquet:
这些结果是意料之中的。使用 Amazon Redshift 的全部原因是它以高度优化的方式存储数据以提供快速查询。存储在 Redshift 之外的数据不会运行 任何地方都快。
Amazon Redshift Spectrum 的目的是提供对存储在 Amazon S3 中的数据的访问,而无需将其加载到 Redshift(类似于 Amazon Athena)中,但它不提供性能保证。
我来晚了回答这个问题。截至 2018 年 2 月,AWS 支持对 Parquet、ORC 等列格式文件的 AWS Spectrum 查询。在您的情况下,您将文件存储为 .CSV。 CSV 是基于行的,这会导致为查询的任何字段提取整行。我建议您在查询之前将文件从 .csv 格式转换为 Parquet 格式。这肯定会带来更快的性能。来自 AWS 的详细信息:Amazon Redshift Spectrum
AWS论坛回复如下:
我了解到您对 Redshift 和 Redshift Spectrum 有相同的查询 运行ning。但是,结果不同,一个 运行 在 2 秒内,另一个 运行 在大约 15 秒内。
首先,我们必须承认,Redshift 和 Spectrum 都是针对不同目的而设计的不同服务。它们的内部结构彼此差异很大,而 Redshift 依赖于 EBS 存储,而 Spectrum 直接与 S3 一起工作。 Redshift Spectrum 的查询采用大规模并行机制来非常快速地对大型数据集执行。大部分处理发生在 Redshift Spectrum 层,大部分数据保留在 Amazon S3 中。
Spectrum 还设计用于处理 PB 级结构化数据和来自 Amazon S3 中文件的 semi-structured 数据,而无需将数据加载到 Amazon Redshift 表中,而 Redshift 使您能够高效地存储数据highly-optimez 通过分发和排序键的方式。
AWS 并未宣传 Spectrum 是 Redshift 的更快替代品。我们提供 Amazon Redshift Spectrum 作为 add-on 解决方案,无需将数据加载到 Redshift(类似于 Amazon Athena)即可访问存储在 Amazon S3 中的数据。
在查询性能方面,不幸的是,我们无法保证性能的提升,因为 Redshift Spectrum 层生成的查询计划与 Redshift 的数据库引擎解释器生成的查询计划完全不同。这个特殊原因本身就足以阻止这些服务之间进行任何查询性能比较,因为这对它们都不公平。
关于您关于动态节点的问题,Spectrum 根据您的查询需求添加它们,Redshift Spectrum 可能会使用数千个实例来利用大规模并行处理。没有任何特定的条件来触发此行为,但是请记住,通过遵循有关如何提高查询性能 [1] 以及如何为查询创建数据文件 [2] 的最佳实践,您可以潜在地改善整体 Spectrum 的性能。
最后,我想指出一些有趣的文档,以进一步阐明如何实现更好的性能改进。参考文献见文末!