![](/img/trans.png)
[英]How do I run a bash script inside python script triggered by google cloud storage finalize event?
[英]Best way to run bash script on Google Cloud to bulk download to Bucket
我對使用谷歌雲和雲服務器很陌生,我被困在一個非常基本的問題上。
我想從互聯網服務器(經許可)批量下載大約 60,000 個 csv.gz 文件。 我編譯了一堆curl
腳本,這些腳本通過管道傳輸到gsutil
,該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 Bucket 的.sh
腳本的最佳方式,或者這種類型的.sh
腳本是使用 Google Cloud 上的應用從互聯網批量下載文件的最有效方法。
我已經看到一些使用 SDK 的建議,我已經安裝在我的本地機器上,但我什至不知道從哪里開始。
非常感謝您對此的任何幫助!
Gcloud 和雲存儲不提供從互聯網獲取對象並將這些對象直接復制到存儲桶上而無需中介(計算機、服務器或雲應用程序)的可能性。
關於哪個雲服務可以幫助您運行 bash 腳本,您可以使用 GCE always free F1-micro 實例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
命令將在成功上傳后刪除文件,這可以幫助您節省硬盤空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.