Redshift Spectrum性能问题

3

我正在使用Redshift Spectrum。我创建了一个外部表,并在S3上上传了一个包含约550万条记录的csv数据文件。如果在这个外部表上执行查询,需要大约15秒钟,而如果在Amazon Redshift上运行相同的查询,只需要约2秒钟就可以得到相同的结果。AWS声称它是一个非常高效的平台,那么造成这种性能差异的原因是什么呢?请为使用spectrum获得相同性能提供解决方案。


1
我对Redshift Spectrum没有太多经验,但这似乎是完全合理的?不同之处在于,Redshift由实例或EBS硬盘支持,而Spectrum在S3上运行。我不会期望它们是可比较的。Spectrum专为PB及以上的分析而设计,这在Redshift或Hadoop中甚至都不可能实现。 - Henry
Redshift并没有使用EBS,而是有效地使用实例存储。我知道他们使用的“本地”很难量化,但换句话说,就是:“如果您有一个拥有2TB本地实例存储的活动单节点XL数据仓库集群”。来源:https://aws.amazon.com/redshift/faqs/ - John
4个回答

4
为了优化性能,请查看此处以了解您的查询。目前,最佳表现是如果您不仅有一个CSV文件,而是有多个文件。通常,您可以说,如果每个查询的文件数至少比群集节点数大一个数量级,那么您将获得出色的性能。
此外,如果您使用Parquet文件,则可以在S3上获得列格式的优势,而不是读取整个文件的CSV - 这也会降低成本。
您可以使用脚本将数据转换为Parquet格式:

有没有在线的CSV转Parquet转换器可用? - Pratik Rawlekar
你可以尝试这个链接:https://github.com/awslabs/aws-big-data-blog/tree/master/aws-blog-spark-parquet-conversion - grundprinzip
有点晚了,但你可以使用 Spectrify https://github.com/hellonarrativ/spectrify。 - Colin Nichols

3

以下是AWS论坛的回复:

我知道你在Redshift和Redshift Spectrum上运行了相同的查询。然而,结果不同,其中一个在2秒内运行,而另一个在大约15秒内运行。

首先,我们必须同意Redshift和Spectrum都是为不同目的而设计的不同服务。它们的内部结构差异很大,Redshift依赖于EBS存储,而Spectrum直接与S3一起工作。 Redshift Spectrum的查询采用大规模并行处理,以快速执行大型数据集。大部分处理发生在Redshift Spectrum层中,大多数数据仍留在Amazon S3中。

Spectrum还设计用于处理来自Amazon S3文件的PB级结构化和半结构化数据,无需将数据加载到Amazon Redshift表中,而Redshift则通过分配和排序键的方式高效地存储数据。

AWS没有将Spectrum作为Redshift的更快替代品进行宣传。我们提供Amazon Redshift Spectrum作为附加解决方案,以提供对存储在Amazon S3中的数据的访问,而无需将其加载到Redshift中(类似于Amazon Athena)。

关于查询性能的问题,不幸的是,我们无法保证性能改进,因为Redshift Spectrum层生成的查询计划与Redshift的数据库引擎解释器生成的查询计划完全不同。这个原因本身足以阻止在这些服务之间进行任何查询性能比较,因为这对它们两者都不公平。

关于你关于即时节点的问题,Spectrum会根据查询的需求添加它们,Redshift Spectrum可以潜在地使用数千个实例来利用大规模并行处理。没有触发此行为的具体标准,但请记住,通过遵循如何提高查询性能[1]和如何为查询创建数据文件[2]的最佳实践,您可以潜在地提高Spectrum的整体性能。

最后,我想指出一些有趣的文档,以更清楚地说明如何实现更好的性能改进。请参见末尾的参考资料!


结尾的参考文献?Spectrum使用实例存储而不是EBS。固定大小的磁盘,“本地”,“内部”存储,在计算节点之间复制数据,以及“具有2TB本地实例存储的活动单节点XL数据仓库集群”,来自aws.amazon.com/redshift/faqs。 - John

2

很抱歉回答晚了。截至2018年2月,AWS已支持对列式格式(如Parquet、ORC等)文件进行AWS Spectrum查询。在您的情况下,您将文件存储为.CSV格式。CSV是基于行的,这会导致检索任何字段时都要提取整个行。我建议在查询之前将文件从.csv转换为Parquet格式。这肯定会带来更快的性能。详情请参见AWS:Amazon Redshift Spectrum


1
这些结果是可以预期的。使用Amazon Redshift的主要原因在于它以高度优化的方式存储数据,以提供快速查询。存储在Redshift之外的数据不会运行得像Redshift一样快。
Amazon Redshift Spectrum的目的是提供对存储在Amazon S3中的数据的访问,而无需将其加载到Redshift中(类似于Amazon Athena),但它不提供性能保证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接