Лучший способ запустить bash-скрипт в облаке Google для массовой загрузки в корзину

#bash #curl #google-cloud-platform #sdk #gsutil

#bash #curl #google-облачная платформа #sdk #gsutil

Вопрос:

Я очень новичок в использовании облачных и облачных серверов Google Cloud, и я застрял на очень простом вопросе.

Я хотел бы массово загрузить около 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 дней, если я запущу со своего компьютера, поэтому я хотел бы запустить его напрямую из облака. Я не знаю лучшего способа сделать это. Это слишком длительный процесс для прямого использования облачной оболочки, и я не уверен, какое другое приложение в облаке является лучшим способом запуска .sh скрипта, который загружается в облачную корзину, или если этот тип .sh скрипта является наиболее эффективным методом массовой загрузки файлов из Интернетаиспользование приложений в облаке Google.

Я видел несколько советов по использованию SDK, который я установил на своем локальном компьютере, но я даже не знаю, с чего начать.

Любая помощь с этим очень ценится!

Ответ №1:

Gcloud и облачное хранилище не предоставляют возможности захватывать объекты из Интернета и копировать их непосредственно в корзину без посредника (компьютера, сервера или облачного приложения).

Что касается того, какой облачный сервис может помочь вам запустить скрипт bash, вы можете использовать виртуальную машину GCE always free F1-micro instance VM (1 бесплатный экземпляр для каждой платежной учетной записи)

Чтобы улучшить загрузку файлов в корзину, вы можете использовать GNU parrallel для одновременного выполнения нескольких Curl команд и сократить время выполнения этой задачи.

Для установки parallel в 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 command удалит файл после успешной загрузки, это может помочь вам сэкономить место на вашем жестком диске.

Комментарии:

1. Спасибо @JAHernandez! Этот ответ очень полезен, и я очень ценю ваш совет о распараллеливании!

2. Или просто заставьте GNU параллельно создавать командные строки из шаблона: seq 60000 | parallel 'curl http://internet.address/csvs/file{}.csv.gz | gsutil cp - gs://my_bucket/file{}.csv.gz'

Ответ №2:

Если у вас есть MD5-хэши каждого CSV-файла, вы можете воспользоваться службой переноса хранилища, которая поддерживает копирование списка файлов (которые должны быть общедоступны по URL-адресам HTTP [S]) в нужную корзину GCS. Смотрите Документы службы передачи в списках URL.

Комментарии:

1. Спасибо! У меня нет хэшей MD5 или размеров файлов.