雅典娜与Redshift Spectrum的比较

31
我正在评估 Athena 和 Redshift Spectrum。这两者都有同样的目的,Spectrum需要一个Redshift集群,而Athena是纯无服务器的。Athena使用Presto查询引擎,而Spectrum使用Redshift的引擎。
那么Athena和Redshift Spectrum有什么具体的缺点吗?在使用Athena或Spectrum时有哪些限制吗?

5个回答

29

我在不同的应用场景下都使用过两种技术,并得出以下结论:

Redshift Spectrum 的优势:

  • 允许创建 Redshift 表
  • 能够高效地与 Redshift 谱系表联接

如果你不需要这些功能,也可以考虑 Athena。

Athena 与 Redshift Spectrum 的区别:

  • 计费。这是主要区别,根据您的使用情况,您可能会发现其中一种比另一种更便宜。
  • 性能。我发现 Athena 稍微快一点。
  • SQL 语法和特性。Athena 源于 Presto,与 Redshift 有所不同,后者的根源在于 Postgres。
  • 连接性。使用 API、JDBC 或 ODBC 连接 Athena 非常容易,但更多产品提供了与 Redshift 的“开箱即用”连接。

此外,无论选择哪种解决方案,请确保使用 AWS Glue 元数据,而非 Athena,因为前者限制较少。


非常感谢Jon Scott先生。 - Mukund
你好,那么 Athena 的成本比 Spectrum 更低吗?同时,使用 Redshift Spectrum 会增加现有 Redshift 使用的负载吗? - akash sharma
在此帖子发布后的两年中,Redshift Spectrum查询规划方面已经有了一些改进,但总体上仍然成立。单独使用Redshift Spectrum并不会使用太多Redshift资源,因为它只是规划查询并将其推送到Athena。 - Jon Scott
@JonScott,请问您能否详细说明一下您关于Redshift Spectrum“仅仅是计划查询并将其推送到Athena”的说法?我没有第一手的证据来反驳,但这似乎至少有点令人惊讶。 - John
1
它肯定没有以有意义的方式使用您的Redshift集群。但是您可能是正确的,它与Athena有所不同。我进行的测试似乎显示Athena和Redshift之间存在密切的对齐,但我无法找到任何AWS文档来证明这一点。自从我发布了上面的答案以来,Athena越来越遭受查询排队的困扰,但我没有看到Redshift Spectrum发生同样的情况。 - Jon Scott

15

这个问题已经存在了相当长的时间,但我认为我可以为讨论做出一些贡献。

Athena是什么?

Amazon Athena是一个交互式查询服务,使用标准SQL语句可以轻松分析存储在Amazon S3中的数据。Athena是无服务器的,因此无需管理基础设施,并且您只需要支付运行的查询费用。(来自文档)

非常简单明了,对吧?

那么接下来就是什么是 Redshift Spectrum 以及为什么亚马逊的人们要创建它,当时 Athena 已经很好地解决了外部表查询的问题?

因此,AWS的开发人员想要创建Redshift的扩展功能(目前作为托管列式数据存储库非常流行),并赋予其与外部表格(通常是S3)通信的能力。但他们希望为Redshift用户(主要是分析人员)提供更简单的方式。很多分析工具在当时不支持Athena,但支持Redshift。但是创建自己的Reshift群集和存储数据成为了瓶颈。再加上Redshift的横向扩展能力不是很强,增加新机器时需要一些停机时间。如果您是Redshift用户,则使存储更便宜可以使您的生活轻松得多。

我建议您在以下情况下使用Redshift Spectrum:

  • 您是现有的Redshift用户,并且想要在Redshift中存储更多的数据。

  • 您希望将冷数据转移到外部表中,但仍然希望在某些情况下与Redshift表进行连接。

  • Spark卸载您的数据,如果您只想将数据导入到Pandas或任何其他工具进行分析。

而且Athena在以下情况下很有用:

  • 您是一个新用户,没有Redshift集群。访问Spectrum需要一个活动的、正在运行的Redshift实例。因此,没有Redshift的情况下就不能选择Redshift Spectrum。
  • 由于Spectrum仍然是一款正在开发的工具,他们正在添加一些功能(如事务)来使其更加高效。
  • 顺便说一句,Athena带有一个很好的REST API,所以如果需要可以使用它。

总之,Redshift + Redshift Spectrum确实非常强大,具有许多优势。但它仍有很长的路要走才能成熟。


你好,我有一个问题,哪种方法更具成本效益:使用Athena连接S3表和Redshift表(使用Glue爬虫),还是使用Redshift Spectrum连接Redshift表和S3外部表?使用Redshift Spectrum会增加现有Redshift使用的负载吗? - akash sharma

1
如果您正在使用Redshift数据库,那么最好同时使用Spectrum来获得所需的性能。
然而,如果您开始探索选项,我们可以考虑使用Athena作为前进的工具。

1
数据扫描费用对于Spectrum和Athena来说是相同的。即使我使用Redshift,为什么要使用Spectrum并在Redshift集群上增加更多负担呢?如果集群已经用于报告,则使用Spectrum将会是过度杀伤。相反,我可以利用Athena并将负载转移到Athena上。 - Mukund
1
Spectrum是否使用红移集群?我认为它的架构类似于虚拟添加更多服务器来协助红移集群。我们在这里做的唯一事情就是创建外部表,对吗? - Rama krishna
@Ramakrishna 在 Redshift 集群和 S3 之间有一些额外的工作人员,如果你仔细地编写查询语句,就可以在那个层面上进行一些下推谓词优化,但是数据会被读入到 Redshift 集群中,并且存在与现有 Redshift 使用的并发争用。你可以在 explain 计划中看到它。理想的用例是当你有大量数据时 - 将其便宜地存储在 s3 上 - 但不需要扩展计算。对于普通的 Redshift,存储与计算是绑定在一起的,因此两者必须同时扩展。 - Davos

1
我曾从Adrian Cantril / LA的2019年SA Pro课程中了解到,Redshift Spectrum会使用自己的Redshift集群来提供比利用AWS为Athena查询提供的共享容量更一致的性能。我认为这些信息可能只对考试有用,我并不认同他的观点。
我写下这个答案是因为我对领先答案处理Athena优于Redshift Spectrum的方式感到不满意。那个答案的其余部分很好,我并不打算在这里直接复制任何内容(没有参考时,我写这篇文章时没有意识到这一点)。
我(再次强调,仅基于我的非干预研究)会在大多数数据存储在S3的情况下选择Spectrum,这通常适用于较大的数据集。然而最近的RA3实例似乎也涵盖了这个领域。因此,我认为Spectrum最适合我们拥有长期Redshift集群的情况,这些集群作为OLAP节点,具有查询S3的闲置容量。
为什么要使用自己的资产来执行 Athena 无需您进行投资就能完成的查询?缓存可以起到作用。如果我相信 Adrian Cantrill 而不是 Jon Scott,那么性能将保持一致。这让我怀疑 RA3 可能会取代 Spectrum;还有 Spectrum 上缺乏良好的文献。为什么亚马逊会提供一个比 Redshift Spectrum 更昂贵的 Athena 无服务器产品呢?这是他们选择弃用 RRS 的方式。我不能相信 Spectrum 已被弃用,因此必须提供这个答案来反驳。只需查看 https://aws.amazon.com/redshift/whats-new/ 即可。
我认为下面的图片(来自 https://d1.awsstatic.com/events/Summits/AMER2020/May13SummitOnline/Modernize_your_data_warehouse.pdf)非常清晰地表明计算节点在这里起着影响作用,也许与 @JonScott 上面宝贵的见解相反。

Spectrum il

最后一个重大差异是Athena仅限于使用IAM进行身份验证,正如在此reinvent 2018(ANT201-R1)幻灯片中所示:

enter image description here


0

一个重要的限制和不同之处是使用结构化数据的能力。 Athena 支持 JSON 和 Parquet 文件格式,而 Redshift Spectrum 只接受扁平数据。

另一个区别是 Athena 有 GIS 函数和 Lambda,有时非常方便。

如果您运行一个独立的新 Postgres,则可以实现更多功能,但就 Redshift(和 Spectrum)之间的比较而言-它是一种已经停止演进的工具。


1
Spectrum支持的格式包括:JSON、ION、Parquet、RCFile、SequenceFile、TextFile、ORC和Avro。 - Joe Harris
2
是的,它支持那些格式,但仅支持以那些格式写入的平面数据。你可以在Parquet中写入结构体和数组,并使用Athena查询它,但不能通过Spectrum查询。 - LauriK
3
我认为在这篇文章发布时,LauriK提出了一些公正的看法。作为一名数据工程师,在某些用例中嵌套数据非常重要,以便高效地存储数据。Redshift Spectrum现在支持嵌套数据,详情请见https://aws.amazon.com/about-aws/whats-new/2018/08/amazon-redshift-announces-support-for-nested-data-with-redshift-spectrum/。 - softdevlife
Spectrum在处理嵌套数据时仍存在许多限制。 https://docs.aws.amazon.com/redshift/latest/dg/nested-data-restrictions.html。 高效存储数据并不是嵌套数据的理想用例。常见情况是查询原始JSON并将其展开为类似分区Parquet或ORC的有用内容。 - Davos

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