在AWS上建立数据管道的最佳实践?(Lambda/EMR/Redshift/Athena)



*免责声明:*这是我第一次在stackoverflow上发帖,如果这里不是这样一个高级问题的地方,请原谅。

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

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

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

它很有效,但感觉像是一个混乱的解决方案:查询很慢,lambda很大。数据通常并没有正常化,因为它会进一步增加查询时间。以CSV形式存储似乎也是愚蠢的

我试着阅读了一些最佳实践,但这有点让人不知所措。我有很多问题,但归根结底是:在这种情况下,我应该使用什么服务?高级体系结构是什么样子的?

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

作为第一次迭代,您上面描述的似乎是有效的,并且是一种合理的方法,但正如您所指出的,这是非常基本和笨拙的。如果外部数据是你将持续摄入并可以预见增长的东西,我强烈建议你首先设计一个数据采集系统,我的建议是要么使用AWS湖泊形成服务,要么如果你想要更多的控制,并建立基础,使用类似3x3x3的方法。

通过设计数据仓库,在未来正确管理数据变得更加简单,并很好地分割文件以备将来使用/数据挖掘。

作为一个高级体系结构,它将类似于:

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

然后,

  1. 取决于您需要以多快的速度可视化数据,如果是大量数据,则可能使用AWS胶水pyshell或pyspark而不是lambda。这会让你的熊猫更干净

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

请注意,以上内容适用于一个非常健壮的摄取系统,如果您有一个数据摄取不频繁的基本用例,则可能会过于夸张。

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

最新更新