运行 bash Google Cloud 上的脚本批量下载到 Bucket 的最佳方式
Best way to run bash script on Google Cloud to bulk download to Bucket
我对使用 Google 云和云服务器还很陌生,我被困在一个非常基本的问题上。
我想从 Internet 服务器批量下载大约 60,000 个 csv.gz 文件(需要许可)。我编译了一堆 curl
脚本,这些脚本通过管道传输到 gsutil
中,然后上传到我的存储桶中,变成如下所示的 .sh
文件。
curl http://internet.address/csvs/file1.csv.gz | gsutil cp - gs://my_bucket/file1.csv.gz
curl http://internet.address/csvs/file2.csv.gz | gsutil cp - gs://my_bucket/file2.csv.gz
...
curl http://internet.address/csvs/file60000.csv.gz | gsutil cp - gs://my_bucket/file60000.csv.gz
然而,如果我从我的机器 运行 这将需要大约 10 天,所以我想直接从云端 运行 它。我不知道最好的方法。直接使用 Cloud Shell 的过程太长了,我不确定 Cloud 上的其他哪个应用程序是 运行 下载到 .sh
脚本的最佳方式Cloud Bucket,或者如果这种类型的 .sh
脚本是使用 Google Cloud 上的应用程序从互联网上批量下载文件的最有效方法。
我看到一些使用 SDK 的建议,我已将其安装在本地计算机上,但我什至不知道从哪里开始。
非常感谢任何帮助!
Gcloud 和 Cloud Storage 不提供从互联网抓取对象并将这些对象直接复制到存储桶上而无需中介(计算机、服务器或云应用程序)的可能性。
关于哪个云服务可以帮助您 运行 一个 bash 脚本,您可以使用 GCE 始终免费 F1-micro instance VM(每个计费帐户免费 1 个实例)
要改进上传文件到存储桶的速度,您可以使用 GNU parrallel 来同时 运行 多个 Curl
命令并缩短完成此任务的时间。
要在 ubuntu/debian 运行 上并行安装此命令:
sudo apt-get install parallel
例如,您可以使用要并行化的命令创建一个名为 downloads
的文件(您必须在文件中写入所有 curl 命令)
下载文件
curl http://internet.address/csvs/file1.csv.gz | gsutil cp - gs://my_bucket/file1.csv.gz
curl http://internet.address/csvs/file2.csv.gz | gsutil cp - gs://my_bucket/file2.csv.gz
curl http://internet.address/csvs/file3.csv.gz | gsutil cp - gs://my_bucket/file3.csv.gz
curl http://internet.address/csvs/file4.csv.gz | gsutil cp - gs://my_bucket/file4.csv.gz
curl http://internet.address/csvs/file5.csv.gz | gsutil cp - gs://my_bucket/file5.csv.gz
curl http://internet.address/csvs/file6.csv.gz | gsutil cp - gs://my_bucket/file6.csv.gz
之后,您只需运行以下命令
parallel --job 2 < downloads
此命令将 运行 最多 2 个并行 curl 命令,直到文件中的所有命令都已执行。
您可以应用到您的例程的另一个改进是使用 gsutil mv
代替 gsutil cp
,mv
命令将在上传成功后删除文件,这可以帮助您节省 space 在你的硬盘上。
如果您拥有每个 CSV 文件的 MD5 哈希值,则可以使用存储传输服务,该服务支持将文件列表(必须可通过 HTTP[S] URL 公开访问)复制到所需的 GCS 存储桶。查看传输服务 docs on URL lists。
我对使用 Google 云和云服务器还很陌生,我被困在一个非常基本的问题上。
我想从 Internet 服务器批量下载大约 60,000 个 csv.gz 文件(需要许可)。我编译了一堆 curl
脚本,这些脚本通过管道传输到 gsutil
中,然后上传到我的存储桶中,变成如下所示的 .sh
文件。
curl http://internet.address/csvs/file1.csv.gz | gsutil cp - gs://my_bucket/file1.csv.gz
curl http://internet.address/csvs/file2.csv.gz | gsutil cp - gs://my_bucket/file2.csv.gz
...
curl http://internet.address/csvs/file60000.csv.gz | gsutil cp - gs://my_bucket/file60000.csv.gz
然而,如果我从我的机器 运行 这将需要大约 10 天,所以我想直接从云端 运行 它。我不知道最好的方法。直接使用 Cloud Shell 的过程太长了,我不确定 Cloud 上的其他哪个应用程序是 运行 下载到 .sh
脚本的最佳方式Cloud Bucket,或者如果这种类型的 .sh
脚本是使用 Google Cloud 上的应用程序从互联网上批量下载文件的最有效方法。
我看到一些使用 SDK 的建议,我已将其安装在本地计算机上,但我什至不知道从哪里开始。
非常感谢任何帮助!
Gcloud 和 Cloud Storage 不提供从互联网抓取对象并将这些对象直接复制到存储桶上而无需中介(计算机、服务器或云应用程序)的可能性。
关于哪个云服务可以帮助您 运行 一个 bash 脚本,您可以使用 GCE 始终免费 F1-micro instance VM(每个计费帐户免费 1 个实例)
要改进上传文件到存储桶的速度,您可以使用 GNU parrallel 来同时 运行 多个 Curl
命令并缩短完成此任务的时间。
要在 ubuntu/debian 运行 上并行安装此命令:
sudo apt-get install parallel
例如,您可以使用要并行化的命令创建一个名为 downloads
的文件(您必须在文件中写入所有 curl 命令)
下载文件
curl http://internet.address/csvs/file1.csv.gz | gsutil cp - gs://my_bucket/file1.csv.gz
curl http://internet.address/csvs/file2.csv.gz | gsutil cp - gs://my_bucket/file2.csv.gz
curl http://internet.address/csvs/file3.csv.gz | gsutil cp - gs://my_bucket/file3.csv.gz
curl http://internet.address/csvs/file4.csv.gz | gsutil cp - gs://my_bucket/file4.csv.gz
curl http://internet.address/csvs/file5.csv.gz | gsutil cp - gs://my_bucket/file5.csv.gz
curl http://internet.address/csvs/file6.csv.gz | gsutil cp - gs://my_bucket/file6.csv.gz
之后,您只需运行以下命令
parallel --job 2 < downloads
此命令将 运行 最多 2 个并行 curl 命令,直到文件中的所有命令都已执行。
您可以应用到您的例程的另一个改进是使用 gsutil mv
代替 gsutil cp
,mv
命令将在上传成功后删除文件,这可以帮助您节省 space 在你的硬盘上。
如果您拥有每个 CSV 文件的 MD5 哈希值,则可以使用存储传输服务,该服务支持将文件列表(必须可通过 HTTP[S] URL 公开访问)复制到所需的 GCS 存储桶。查看传输服务 docs on URL lists。