0

我有一个用例,我想从 DynamoDB 中获取数据并对数据进行一些转换。在此之后,我想创建 3 个 csv 文件(同一数据将进行 3 次转换)并将它们转储到 3 个不同的 s3 位置。我的架构将如下所示: 在此处输入图像描述

有可能这样做吗?我似乎找不到任何有关它的文档。如果无法使用管道,是否有任何其他服务可以帮助我处理我的用例?

这些转储将每天安排。我的另一个考虑是使用 aws lamda。但是根据我的理解,它是基于事件的触发而不是基于时间的调度,对吗?

4

2 回答 2

0

是的,这是可能的,但不使用 HiveActivity 而不是 EMRActivity。如果您查看HiveActivity的数据管道文档,它清楚地说明了它的目的并且不适合您的用例:

在 EMR 集群上运行 Hive 查询。HiveActivity 可以更轻松地设置 Amazon EMR 活动,并根据来自Amazon S3 或 Amazon RDS的输入数据自动创建 Hive 表。您只需指定要在源数据上运行的 HiveQL。AWS Data Pipeline 根据 HiveActivity 对象中的输入字段自动创建具有 ${input1}、${input2} 等的 Hive 表。

以下是您的数据管道的外观。在 UI 中还有一个Export DynamoDB table to S3用于 AWS Data Pipeline 的内置模板,它为您创建基本结构,然后您可以扩展/自定义以满足您的要求。

在此处输入图像描述

对于您使用Lambda的下一个问题,当然可以将 lambda 配置为具有基于事件的触发或基于计划的触发,但我不建议将AWS Lambda其用于任何 ETL 操作,因为它们是有时间限制的,并且通常的 ETL 比 lambda 时间限制长。

AWS 为 ETL 提供了特定的优化功能AWS Data PipelineAWS Glue我总是建议在两者之间进行选择。如果您的 ETL 涉及不在 AWS 计算和存储服务中管理的数据源,或者任何上述两个选项都不能满足的特殊用例,那么AWS Batch我将是下一个考虑因素。

于 2019-02-22T18:26:41.957 回答
0

感谢您的回答。我已经忙了一段时间了。在您发布答案后,我进行了一些挖掘。事实证明,我们也可以使用 Hive 活动将数据转储到不同的 s3 位置。

在这种情况下,这就是数据管道的样子。

在此处输入图像描述

但我相信,当您的输入源是 DynamoDB 表时,编写多个配置单元活动不是一个好主意,因为配置单元不会在内存中加载任何数据。它在实际表上执行所有计算,这可能会降低表的性能。甚至文档也建议导出数据,以防您需要对同一数据进行多次查询。参考

输入将 Hive 应用程序中的表映射到 DynamoDB 中的数据的 Hive 命令。此表用作对存储在 Amazon DynamoDB 中的数据的引用;数据未本地存储在 Hive 中,使用此表的任何查询都针对 DynamoDB 中的实时数据运行,每次运行命令时都会消耗表的读取或写入容量。如果您希望针对同一个数据集运行多个 Hive 命令,请考虑先将其导出。

就我而言,我需要每天对同一数据执行一次不同类型的聚合。由于 dynamoDB 不支持聚合,我转向使用 Hive 的数据管道。最后,我们最终使用了基于 My-SQL 的 AWS Aurora。

于 2019-03-10T10:14:40.560 回答