AWS 数据管道:将数据转储到 3 个 s3 节点
AWS data pipeline: dump data to 3 s3 nodes
我有一个用例,其中我想从 DynamoDB 中获取数据并对数据进行一些转换。在此之后,我想创建 3 个 csv 文件(同一数据将有 3 个转换)并将它们转储到 3 个不同的 s3 位置。
我的架构将如下所示:
可以吗?我似乎找不到任何关于它的文档。如果无法使用管道,是否有任何其他服务可以帮助我处理我的用例?
这些转储将每天安排一次。我的另一个考虑是使用 aws lamda。但是根据我的理解,它是基于事件触发而不是基于时间的调度,对吗?
是的,这是可能的,但不是使用 HiveActivity 而不是 EMRActivity。如果您查看 HiveActivity 的数据管道文档,它清楚地说明了它的用途并且不适合您的用例:
Runs a Hive query on an EMR cluster. HiveActivity makes it easier to set up an Amazon EMR activity and automatically creates Hive tables based on input data coming in from either Amazon S3 or Amazon RDS. All you need to specify is the HiveQL to run on the source data. AWS Data Pipeline automatically creates Hive tables with ${input1}, ${input2}, and so on, based on the input fields in the HiveActivity object.
下面是您的数据管道的外观。 UI 中还有一个用于 AWS Data Pipeline 的内置模板 Export DynamoDB table to S3
,它可以为您创建基本结构,然后您可以 extend/customize 满足您的要求。
关于使用 Lambda 的下一个问题,当然可以将 lambda 配置为 基于事件的触发或基于计划的触发,但我不建议对任何 ETL 操作使用 AWS Lambda
,因为它们是 时间限制 并且通常的 ETL 比 lambda 时间限制长。
AWS 为 ETL 提供了特定的优化功能,AWS Data Pipeline
和 AWS Glue
,我总是建议在两者之间进行选择。如果您的 ETL 涉及未在 AWS 计算和存储服务中管理的数据源或上述两个选项无法满足的任何特殊用例,那么 AWS Batch
将是我的下一个考虑因素。
感谢 amith 的回答。我已经忙了好一段时间了。在您发布答案后,我做了一些挖掘。事实证明,我们也可以使用 Hive activity 将数据转储到不同的 s3 位置。
在这种情况下,数据管道就是这样。
但我认为,当您的输入源是 DynamoDB table 时,编写多个 Hive 活动并不是一个好主意,因为 Hive 不会在内存中加载任何数据。它对实际 table 进行所有计算,这可能会降低 table 的性能。甚至文档也建议导出数据,以防您需要对同一数据进行多次查询。 Reference
Enter a Hive command that maps a table in the Hive application to the data in DynamoDB. This table acts as a reference to the data stored in Amazon DynamoDB; the data is not stored locally in Hive and any queries using this table run against the live data in DynamoDB, consuming the table’s read or write capacity every time a command is run. If you expect to run multiple Hive commands against the same dataset, consider exporting it first.
就我而言,我需要每天对同一数据执行一次不同类型的聚合。由于 dynamoDB 不支持聚合,我转向使用 Hive 的数据管道。最后我们最终使用了基于 My-SQL 的 AWS Aurora。
我有一个用例,其中我想从 DynamoDB 中获取数据并对数据进行一些转换。在此之后,我想创建 3 个 csv 文件(同一数据将有 3 个转换)并将它们转储到 3 个不同的 s3 位置。
我的架构将如下所示:
可以吗?我似乎找不到任何关于它的文档。如果无法使用管道,是否有任何其他服务可以帮助我处理我的用例?
这些转储将每天安排一次。我的另一个考虑是使用 aws lamda。但是根据我的理解,它是基于事件触发而不是基于时间的调度,对吗?
是的,这是可能的,但不是使用 HiveActivity 而不是 EMRActivity。如果您查看 HiveActivity 的数据管道文档,它清楚地说明了它的用途并且不适合您的用例:
Runs a Hive query on an EMR cluster. HiveActivity makes it easier to set up an Amazon EMR activity and automatically creates Hive tables based on input data coming in from either Amazon S3 or Amazon RDS. All you need to specify is the HiveQL to run on the source data. AWS Data Pipeline automatically creates Hive tables with ${input1}, ${input2}, and so on, based on the input fields in the HiveActivity object.
下面是您的数据管道的外观。 UI 中还有一个用于 AWS Data Pipeline 的内置模板 Export DynamoDB table to S3
,它可以为您创建基本结构,然后您可以 extend/customize 满足您的要求。
关于使用 Lambda 的下一个问题,当然可以将 lambda 配置为 基于事件的触发或基于计划的触发,但我不建议对任何 ETL 操作使用 AWS Lambda
,因为它们是 时间限制 并且通常的 ETL 比 lambda 时间限制长。
AWS 为 ETL 提供了特定的优化功能,AWS Data Pipeline
和 AWS Glue
,我总是建议在两者之间进行选择。如果您的 ETL 涉及未在 AWS 计算和存储服务中管理的数据源或上述两个选项无法满足的任何特殊用例,那么 AWS Batch
将是我的下一个考虑因素。
感谢 amith 的回答。我已经忙了好一段时间了。在您发布答案后,我做了一些挖掘。事实证明,我们也可以使用 Hive activity 将数据转储到不同的 s3 位置。
在这种情况下,数据管道就是这样。
但我认为,当您的输入源是 DynamoDB table 时,编写多个 Hive 活动并不是一个好主意,因为 Hive 不会在内存中加载任何数据。它对实际 table 进行所有计算,这可能会降低 table 的性能。甚至文档也建议导出数据,以防您需要对同一数据进行多次查询。 Reference
Enter a Hive command that maps a table in the Hive application to the data in DynamoDB. This table acts as a reference to the data stored in Amazon DynamoDB; the data is not stored locally in Hive and any queries using this table run against the live data in DynamoDB, consuming the table’s read or write capacity every time a command is run. If you expect to run multiple Hive commands against the same dataset, consider exporting it first.
就我而言,我需要每天对同一数据执行一次不同类型的聚合。由于 dynamoDB 不支持聚合,我转向使用 Hive 的数据管道。最后我们最终使用了基于 My-SQL 的 AWS Aurora。