使用Java将大文件读取到GCP

时间:2019-01-22 03:42:01

标签: java google-cloud-platform google-cloud-storage

我正在寻找一种解决方案,该方法如何以有效的方式将多个文件从FTP读取到Google CloudStorage。每个文件大小为3-5 GB,文件大小为100-200。

我找到了下一个解决方案:使用GAE实例读取文件。

有什么想法我还能尝试吗?

1 个答案:

答案 0 :(得分:0)

最好的方法是使用gsutil compose将Google Cloud parallel uploads用于Cloud Storage。您可以尝试以下操作:

gsutil -o GSUtil:parallel_composite_upload_threshold=150M cp bigfile gs://your-bucket

基本上:

  1. gsutil将文件分成多个较小的块。
  2. 然后将所有文件上传到Cloud Storage。
  3. 它们组成一个文件
  4. 然后删除所有较小的块

请记住,这需要在文档中进行权衡:

  

使用并行复合上传会在上传之间进行权衡   性能和下载配置:如果启用并行   复合上传,您的上传将运行得更快,但有人会需要   在每台机器上安装已编译的crcmod   gsutil或其他Python应用程序下载对象的位置。   请注意,对于此类上载,需要crcmod才能下载   不管并行复合上传选项是打开还是打开   不。对于某些发行版,这很容易(例如,它已预先安装   在macOS上),但在其他情况下,某些用户发现很难。

如果您无法使用gsutil并且无法在FTP服务器上安装Cloud Storage SDK,则可以在VM中下载文件并在此VM中运行Cloud Storage SDK或gsutil

App Engine Standard不允许写入磁盘。因此,您上传的所有文件都将存储在memory上,直到将它们上传到Cloud Storage。因此,在这种情况下,我认为这样做不方便。

App Engine Flexible确实允许写入磁盘。这是一个ephemeral磁盘,重新启动后,该磁盘的内容将被删除,并且每周重新启动。但是您不会利用负载均衡器和实例的自动伸缩功能。

在这种情况下,我认为最好的方法是使用Google Cloud preemptible VM。现在,即使此虚拟机最多只能使用一天,但它们的运行价格比普通虚拟机低。一旦它们转到get terminated,您就可以检查哪些文件已上传到存储,并在新的可抢占VM中恢复工作量。您还可以使用大量并行运行的此类VM,以加快下载和上传过程。