【问题标题】:Which AWS service should I use to process large text file?我应该使用哪种 AWS 服务来处理大型文本文件?
【发布时间】:2018-06-24 18:38:54
【问题描述】:

我有一个用例,我需要读取一个非常大的文本文件,该文件最多可包含 100 万条记录。对于每条记录,我必须执行一些验证,然后将其转换为不同的 JSON,然后将其推送到 SNS 主题。我不需要按顺序阅读它们,因此我可以使用并行性。一种选择是将文件放在 S3 存储桶中,然后使用 lambda 处理文件,该文件将记录扇出(异步)到多个 lambda 函数,这些函数负责转换(和验证),然后将其推送到 SNS。另一种选择是使用运动流并使用多个 lambdas 做同样的事情。 Multiple Lambdas using kinesis streams

理想的方法应该是什么?

  1. S3 -> Lambda -> 多个 Lambdas -> SNS
  2. Kinesis -> 多个 Lambda(或 Lambda -> 多个 Lambda -> SNS)

【问题讨论】:

  • 你的记录是什么格式的? CSV?还有什么?使用 Kinesis 仅在您需要某种排序或将有多个数据源时才明智,因此我认为没有必要这样做。
  • 您多久会这样做一次?这只是一次性的活动,永远不会重复吗?尽快完成它有什么特别的好处吗?您是否有进行转换的现有代码(如果有,它是什么语言)?处理一条记录需要多长时间,或者与 I/O 时间相比可以忽略不计?如果您有执行此任务的现有程序(没有并行处理),需要多长时间?
  • @JohnRotenstein。这将是每周重复一次的任务。快速完成它并没有什么特别的好处。我有现有的代码(在 Java 中)。与 I/O 相比,它可以忽略不计,因为它只是以一种新格式获取和设置,并在元数据中添加了一些字段。我目前没有执行此任务的现有程序。
  • 一百万条记录并不是一个大文件,除非每条记录都有几兆字节长。即便如此,它也完全在单台机器的能力范围内。除非这些记录在多台机器上生成并聚合,否则 Kinesis 只会增加复杂性。我只想编写一个在 EC2 实例上运行的程序。如果要添加调度,请在 AWS Batch 上运行。

标签: amazon-web-services amazon-s3 aws-lambda amazon-kinesis


【解决方案1】:

您可能想了解 AWS Glue。该服务可以对存储在 S3 中的大部分内容执行 ETL,因此它可能会为您省去自己执行此操作的麻烦。结合 S3 触发 Lambda 这可能是一个有趣的选择?

编辑: 如果文件可以用正则表达式解析,也许试试 Athena? Athena 相对便宜,可以轻松处理较大的文件。

如果记录具有可预测的长度,您可以使用 Range 请求在将文件传递到 Lambda 之前对其进行分割,从而防止运行时间过长。

另外,您是否尝试过使用 Lambda 解析和分块文件? 100 万条记录并不算多,简单地将行拆分并将(块)交给验证(或者可能是 SNS)应该不是问题。

【讨论】:

  • 带有 lambda 的 S3 似乎很有趣,但由于记录很多(可能高达一百万),并且 lambda 可以运行多长时间是有限制的。现在,如果 S3 触发需要对每条记录执行转换的 lambda,则推送到 SNS 主题。我认为 lambda 将这项工作分发给工作人员 lamdas(转换和推送)可能会用完时间,即使它是异步执行的。这就是我探索 Kinesis 的原因。
  • 但是您要处理什么样的记录? Athena 可以简单地查询文件吗?是 1 个包含 100 万条记录的文件还是 100 万个文件?无服务器是必需的吗?
  • 1 个文件,包含 100 万条记录。在将其推送到 SNS 之前,将对每条记录进行相同的验证和转换。
  • S3 触发一个启动状态机(步进函数)的 lambda 怎么样,该状态机负责将批量记录提供给多个 lambda?
  • 这绝对可行,但请记住 Step Functions 具有固定的并发性。因此,如果记录数波动,您无法更改并发 lambdas 的数量
猜你喜欢
  • 2011-09-24
  • 2018-10-18
  • 1970-01-01
  • 2012-09-06
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多