Java 使用AWSEC2将大量文件放入S3存储桶

Java 使用AWSEC2将大量文件放入S3存储桶,java,amazon-web-services,amazon-s3,amazon-ec2,Java,Amazon Web Services,Amazon S3,Amazon Ec2,我正在尝试将大量文件(约50 TB)下载到S3存储桶中。问题是这些文件只能通过网站上的各种下载链接访问(它们不在我的硬盘上)。我可以直接将一小部分数据下载到自己电脑的硬盘上,上传到S3存储桶,从硬盘上删除,然后重复另一部分,但我担心这样做会花费太长时间,占用太多带宽。相反,我希望我可以使用一个EC2实例来做同样的事情,正如本文的回答者所建议的那样,但是我很难用Java来做这件事 使用Java,请求和启动EC2实例看起来非常清晰;然而,实际使用实例会变得有点模糊。我知道您可以使用EC2管理控制台直

我正在尝试将大量文件(约50 TB)下载到S3存储桶中。问题是这些文件只能通过网站上的各种下载链接访问(它们不在我的硬盘上)。我可以直接将一小部分数据下载到自己电脑的硬盘上,上传到S3存储桶,从硬盘上删除,然后重复另一部分,但我担心这样做会花费太长时间,占用太多带宽。相反,我希望我可以使用一个EC2实例来做同样的事情,正如本文的回答者所建议的那样,但是我很难用Java来做这件事

使用Java,请求和启动EC2实例看起来非常清晰;然而,实际使用实例会变得有点模糊。我知道您可以使用EC2管理控制台直接连接到实例,我可以在连接到实例时手动运行脚本,下载并上载文件,不过我更喜欢从我的计算机运行脚本,创建EC2实例,然后使用实例来完成我的目标。这是因为以后在我的项目中,我将每天从同一个网站下载一个文件,在我的计算机上使用Windows计划任务管理器运行脚本比让EC2实例每天24小时运行要便宜


简单地说,如何使用Java来使用EC2实例

我首先要指出,下载/上传50TB的数据

选项1-使用Java实现

您正在做的事情可以通过。您需要开发一个应用程序,下载所需的文件,然后使用SDK将这些文件上传到您的S3存储桶

我建议您不要使用这种方法,因为您将为带宽支付两倍的费用,首先是EC2实例,然后是S3存储桶。还有更简单的方法

选项2-使用Lambda进行操作

按照您链接的答案中的建议,使用将远程文件上载到S3存储桶。您可以编写Java、NodeJS等,这将降低带宽成本,也意味着您不需要启动并部署到任何EC2实例

其他要点

关于从本地机器上运行一些东西并每天进行处理,我会在您完成初始上传后考虑解决这个问题。试图同时解决这两个问题可能会让你头疼

最后,另一个选择可能是服务。他们将向您发送一个或多个物理设备,您将填充这些设备并将其发送回。可能不适合您的用例,但值得一提


警告—对于50 TB的数据,请注意下载和上载时将产生的带宽费用。

您的解决方案需要两个不同的阶段:

  • 获取要下载的文件列表
  • 下载文件
  • 我建议将这两项任务分开,因为列出文件的逻辑中的错误可能会中途停止下载过程,使问题纠正后很难恢复

    列出文件最好在本地计算机上进行,这样可以很容易地调试和跟踪进度。结果将是一个包含大量链接的文本文件。(这在概念上类似于许多刮板实用程序。)

    第二部分(下载文件)可以在Amazon EC2上完成,也可以通过AWS Lambda函数完成

    使用亚马逊EC2

    这将是一个直接的应用程序,读取您的文本文件,循环浏览链接并下载文件。如果这是一个一次性的要求,我不会花太多时间去看中你的多线程应用程序。然而,这意味着你不能充分利用网络带宽,亚马逊EC2是每小时收费的

    因此,我建议使用相当小的实例类型(每个实例都有有限的网络带宽,可以饱和),但是并行运行多个实例,每个实例都有一部分文本文件。这样你就可以分而治之了

    如果中途出错,您可以随时调整代码,手动编辑文本文件以删除已完成的条目,然后继续。这是相当快和肮脏的,但如果这只是一个一次性的要求就可以了

    此外,我建议使用,这可以节省高达90%的亚马逊EC2成本。如果现货价格上涨,实例有被终止的风险,这将导致您需要额外的工作来确定恢复的位置,因此只需出价等于正常的按需价格,您的实例就不太可能(但不能保证)不会被终止

    使用AWS Lambda函数

    每个AWS Lambda功能最多只能运行5分钟,并且只能在本地存储500MB的数据。幸运的是,函数可以并行运行

    因此,要使用AWS Lambda,您需要编写一个控制应用程序,为列表中的每个文件调用AWS Lambda函数。如果任何文件超过500MB,则需要进行特殊处理

    像这样编写、调试和监视一个并行、分布式应用程序可能不值得为一次性任务付出努力。调试任何问题和从错误中恢复将更加困难。(不过,如果您有持续的业务需求,这将是一种理想的持续下载方式。)

    底线:我建议您在本地计算机上编写并调试downloader应用程序(带有一小部分测试文件),然后使用与downlo并行运行的多个Amazon EC2 Spot实例