Amazon EMR 与 Amazon Redshift

Ros*_*ndo 2 amazon-web-services amazon-emr amazon-redshift amazon-redshift-spectrum

对于大多数用例,可以使用 Amazon EMR 对流数据或有界数据(例如来自 Amazon S3)进行 Spark 转换,然后可以使用转换后的数据再次将数据写入 S3。

还可以在 Amazon Redshift 中使用来自 S3 的不同数据加载到不同的 Redshift 表中,然后将不同的 Redshift 表中的数据加载到最终表中来实现转换。(现在有了 Redshift 频谱,我们也可以直接从 S3 中选择和转换数据。)

话虽如此,我看到转换可以在 EMR 和 Redshift 中完成,Redshift 加载和转换可以用更少的开发时间完成。

那么,EMR 是否应该用于主要涉及流/无界数据的用例?EMR 更可取的其他用例是什么(我知道 Spark 也提供其他核心、sql、ml 库),但只是为了实现转换(涉及连接/减速器),我没有看到除此之外的其他用例在 EMR 中进行流式传输,此时也可以在 Redshift 中实现转换。

请提供何时使用 EMR 转换与 Redshift 转换的用例。

Jon*_*ott 8

在第一种情况下,我更喜欢使用 Redshift 进行转换:

  • 开发更简单,SQL 比 Spark
  • 维护/监控更容易
  • 假设您可以在“非高峰”时间运行,基础设施成本会更低。

有时 EMR 是更好的选择,我会在这些情况下考虑它:

  • 当您希望在 S3 上同时拥有原始数据和转换后的数据时,例如“数据湖”策略
  • 需要复杂的转换。使用 Redshift 无法进行某些转换,例如何时
    • 管理复杂和大型的 json 列
    • 动态旋转数据(可变数量的属性)
    • 需要第三方库
  • 数据大小如此之大,以至于需要更大的红移集群来处理转换。

除了 Redshift 和 EMR 之外,还有其他其他选项,这些也应该考虑。例如

  • 标准 python 或其他脚本语言:
    • 创建动态转换sql,可以在redshift中运行
    • 从 csv 处理到镶木地板或类似的
    • 调度(例如气流)
  • AWS 雅典娜
    • 可与 s3(例如镶木地板)输入和输出一起使用
    • 使用在某些情况下比 Redshift SQL 更强大的 Presto 语法使用 SQL(因此在开发时具有一些优势)
    • 由于不需要永久性的基础设施成本,因此可以产生显着的成本效益,按使用量付费。

还应考虑 AWS Batch 和 AWS lambda。