需要批处理CSV文件的最佳做法/建议并将其保存在AWS S3中

我有一个linux服务器,它将定期获取约300个CSV文件(每个文件从1MB到200MB)。我需要检查文件的每一行,验证它的数据(想对每个文件进行数据库调用,并获取所有有效记录并将其保存在内存中以进行查找),对有效记录进行过滤/添加一些其他信息,保存所有记录在CSV文件中。对于X个输入文件,将生成X个输出文件。最后,这些文件应上传到AWS S3。 我在想两种方法。

  1. 使用POST方法创建Rest API,它将执行文件上传/处理(读取csv文件,验证,添加信息,保存到临时位置,最后上传到S3),将其部署在负载均衡器后面的多台服务器上,并通过HTTP方法调用LB URL适用于所有300台服务器。关注-这是个好方法吗? &如何发送300个以上的文件,以便可以利用LB后面的多个服务器的优势,并且由于文件处理可能会根据大小而花费时间,因此不想接收threadtimeout异常。还想跟踪HTTP响应以进行审核吗?
  2. 使用Sprint批处理-创建作业(一个作业将一次读取一个文件并进行处理),最后将文件上传到S3。关注-对于每个文件,我都希望进行数据库调用并获取该文件的所有有效记录,并将其保留在内存中,并针对该行进行验证。如果更多文件并行运行,是否会出现内存问题?
评论
  • ramet
    ramet 回复

    系统的瓶颈将是您对每个文件的数据库调用。如果您在数据库调用中包含SLA,则可以基于它在任何时间点限制扩展(AWS中的Autoscaling)。

    如果使用API​​方法,则可以发送S3文件的位置,让您的服务处理从S3获取文件并进行处理,然后将其上传到另一个位置。

    如果使用批处理,则可以使用Glue Job,它在后台创建EMR进行处理。