#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 или размеров файлов.