在 AWS 上设置数据管道的最佳实践? (Lambda/EMR/Redshift/雅典娜)

Posted

技术标签:

【中文标题】在 AWS 上设置数据管道的最佳实践? (Lambda/EMR/Redshift/雅典娜)【英文标题】:Best practices for setting up a data pipeline on AWS? (Lambda/EMR/Redshift/Athena) 【发布时间】:2020-04-16 14:51:39 【问题描述】:

*免责声明:*这是我第一次在 *** 上发帖,如果这里不适合提出如此高级别的问题,请原谅。

我刚开始担任数据科学家,有人要求我为“外部”数据设置 AWS 环境。这些数据来自不同的来源,采用不同的格式(尽管主要是 csv/xlsx)。他们希望将其存储在 AWS 上,并能够使用 Tableau 对其进行查询/可视化。

尽管我缺乏 AWS 经验,但我还是设法想出了一个或多或少可行的解决方案。这是我的方法:

    使用 Lambda 抓取原始 csv/xlsx 使用 pandas/numpy 在与 1 相同的 Lambda 中清理和转换数据。 处理后的数据以 CSV 格式写入 S3 文件夹(仍在同一个 lambda 中) Athena 用于索引数据 使用 Athena 创建额外的表(其中一些是视图,其他不是) 为 Tableau 设置了 Athena 连接器

它可以工作,但感觉像是一个混乱的解决方案:查询速度很慢,而 lambda 表达式很大。数据通常没有尽可能地标准化,因为它会更多地增加查询时间。存储为 CSV 似乎也很愚蠢

我已尝试阅读最佳做法,但有点不知所措。我有很多问题,但归结为:在这种情况下我应该使用哪些服务?高层架构是什么样的?

【问题讨论】:

【参考方案1】:

我有一个非常相似的用例;但是,这一切都取决于项目的规模以及您希望如何对解决方案进行稳健性/未来规划。

作为第一次迭代,您上面描述的方法似乎可行并且是一种合理的方法,但正如您所指出的那样,它非常基本且笨拙。如果外部数据是您将持续摄取并且可以预见增长的东西,我强烈建议您首先设计一个数据湖系统,我的建议是使用 AWS Lake Formation 服务,或者如果您想要更多控制,并建立基础,使用一些东西就像3x3x3 方法一样。

通过设计您的数据湖,正确地管理未来的数据会变得更加简单,并且可以很好地分区您的文件以供将来使用/数据挖掘。

作为一个高级架构应该是这样的:

    Lambda 从源获取请求并粘贴到 s3 Datalake 系统处理文件和自动分区 + 标签

那么,

    取决于您需要以多快的速度可视化数据以及大量数据是否可能使用 AWS glue pyshell 或 pyspark 而不是 lambda。它将更清洁地处理您的 pandas/numpy。

如果您使用 Athena 或同等产品以提高查询速度,我还建议您将文件转换为镶木地板。记住文件分区对性能很重要!

请注意,以上内容适用于相当健壮的摄取系统,如果您有一个不经常摄取数据的基本用例,则可能有点过头了。

如果您的数据是小数据包但非常频繁,您甚至可以在 lambda 到 s3 步骤前面使用一个运动层,以更有条理的方式管理您的数据。如果您想要更现代的仓库解决方案,您也可以使用 redshift 来托管您的文件,而不是 S3。但是,如果您有 x 个来源,为了简单起见,我建议您坚持使用 s3。

【讨论】:

以上是关于在 AWS 上设置数据管道的最佳实践? (Lambda/EMR/Redshift/雅典娜)的主要内容,如果未能解决你的问题,请参考以下文章

AWS 中的 cloudformation 最佳实践

使用 CDK、AWS 和 Github 私有存储库部署的最佳实践?

如何将 Python Lambda 函数集成到 AWS Amplify 的管道中

AWS - ELB 可用区 + VPC 最佳实践?

在 gitlab CI/CD 中使用 GOOGLE_APPLICATION_CREDENTIALS 的最佳实践

在 AWS ECS 上使用 docker-compose 进行持续部署的最佳实践