在 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/雅典娜)的主要内容,如果未能解决你的问题,请参考以下文章
使用 CDK、AWS 和 Github 私有存储库部署的最佳实践?
如何将 Python Lambda 函数集成到 AWS Amplify 的管道中