使用 S3 作为原始数据的数据管道如何工作?

问题描述

我目前使用 AWS S3 作为数据湖来存储原始数据,每分钟向指定存储桶添加大约 100 个项目。我知道数据管道和数据 ETL 概念的基础知识,但我仍然不熟悉基础知识,例如 Apache Spark 是什么,或者 AWS glue 的工作原理。

我愿意尝试所有教程并为自己学习,但我不知道从哪里开始。如果可以,请指导我从哪里开始执行以下任务。

  1. 每当向 S3 存储桶添加新对象时,对它们进行转换并将其存储在另一个数据存储中。
  2. 如果要以大型 CSV 格式进行管理,则将生成的转换项存储在何处(我猜是 DynamoDB,因为它是表数据?)。
  3. 这些任务的低级解决方案和高级解决方案如何? (例如,使用 Spark 与 glue)

谢谢!

解决方法

这取决于用例。

对于就地转换,您可以/应该使用 AWS Lambda。对于批量转换,您可以使用例如Glue 或 EMR,都可以运行 Spark。

在哪里存储它们/以什么格式取决于您的访问模式,例如在不了解访问模式的情况下将它们存储在发电机中很好是一个非常糟糕的想法.将它们保存在 S3 中,正确分区,在 Glue 中有一个 Metastore 并通过 Athena 访问它们可能会起作用。但这非常慢,并且不能很好地处理 100 个文件/分钟,您需要更少的文件和更大的文件,“微批次”。在所有情况下,每个客户端都可以根据数据创建特定的读取模型,并根据实际应用访问的需要存储和索引它。

你必须问自己几个问题:

  • 您对数据的了解程度如何?
  • 你知道有多少收入吗?
  • 您知道数据需要多快可用吗?
  • 您知道如何访问数据吗?
  • 是实时数据还是批量数据?
  • ...

我建议您只需要开始工作/试验它,创建一个数据湖及其架构是一个需要数年时间的过程。