Экспорт данных из Google Cloud Storage в Amazon S3
Я хотел бы перенести данные из таблицы в BigQuery, в другую в Redshift. Мой запланированный поток данных выглядит следующим образом:
BigQuery -> Облачное хранилище Google -> Amazon S3 -> Redshift
Я знаю о службе передачи облачных хранилищ Google, но не уверен, что она мне поможет. Из документации Google Cloud:
Сервис передачи облачного хранилища
На этой странице описана служба передачи облачного хранилища, которую вы можете использовать для быстрого импорта онлайн-данных в облачное хранилище Google.
Я понимаю, что этот сервис можно использовать для импорта данных в Google Cloud Storage, а не для экспорта из него.
Есть ли способ экспортировать данные из Google Cloud Storage в Amazon S3?
9 ответов
Вы можете использовать gsutil для копирования данных из корзины Google Cloud Storage в корзину Amazon, используя такую команду, как:
gsutil -m rsync -rd gs://your-gcs-bucket s3://your-s3-bucket
Обратите внимание, что указанная выше опция -d заставит gsutil rsync удалить объекты из вашей корзины S3, которых нет в вашей корзине GCS (в дополнение к добавлению новых объектов). Вы можете отключить эту опцию, если вы просто хотите добавить новые объекты из вашей GCS в корзину S3.
Перейти к любому экземпляру или облачной оболочке в GCP
Прежде всего настройте свои учетные данные AWS в своем GCP
aws configure
если он не распознает интерфейс командной строки AWS, следуйте этому руководству https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html
следуйте этому URL для настройки AWS https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
Прикрепление моего скриншота
Затем с помощью gsutil
gsutil -m rsync -rd gs://storagename s3://bucketname
16 ГБ данных передаются за несколько минут
С помощью
gsutil
Инструмент, мы можем выполнять широкий спектр задач по управлению корзинами и объектами, в том числе:
- Создание и удаление корзин.
- Загрузка, скачивание и удаление объектов.
- Список ведер и объектов. Перемещение, копирование и переименование объектов.
мы можем копировать данные из корзины Google Cloud Storage в корзину amazon s3, используя операции и. тогда как
gsutil rsync
собирает все метаданные из корзины и синхронизирует данные с s3
gsutil -m rsync -r gs://your-gcs-bucket s3://your-s3-bucket
gsutil cp
копирует файлы один за другим, и, поскольку скорость передачи хорошая, он копирует 1 ГБ примерно за 1 минуту.
gsutil cp gs://<gcs-bucket> s3://<s3-bucket-name>
если у вас есть большое количество файлов с большим объемом данных, используйте этот сценарий bash и запускайте его в фоновом режиме с несколькими потоками, используя
screen
в экземпляре Amazon или GCP с настроенными учетными данными AWS и проверенной аутентификацией GCP.
Перед запуском скрипта перечислите все файлы и перенаправьте в файл и прочтите файл как входные данные в скрипте, чтобы скопировать файл.
gsutil ls gs://<gcs-bucket> > file_list_part.out
Сценарий Bash:
#!/bin/bash
echo "start processing"
input="file_list_part.out"
while IFS= read -r line
do
command="gsutil cp ${line} s3://<bucket-name>"
echo "command :: $command :: start time :: $now"
eval $command
retVal=$?
if [ $retVal -ne 0 ]; then
echo "Error copying file"
exit 1
fi
echo "Copy completed successfully"
done < "$input"
echo "completed processing"
выполнить сценарий Bash и записать вывод в файл журнала, чтобы проверить прогресс завершенных и неудачных файлов.
bash file_copy.sh > /root/logs/file_copy.log 2>&1
Использование Rclone ( https://rclone.org/).
Rclone - это программа командной строки для синхронизации файлов и каталогов между ними
Google Drive
Amazon S3
Openstack Swift / Rackspace cloud files / Memset Memstore
Dropbox
Google Cloud Storage
Amazon Drive
Microsoft OneDrive
Hubic
Backblaze B2
Yandex Disk
SFTP
The local filesystem
Мне нужно было перенести 2 ТБ данных из корзины Google Cloud Storage в корзину Amazon S3. Для этой задачи я создал Google Compute Engine V8CPU (30 ГБ).
Разрешить вход с использованием SSH на Compute Engine. После входа создайте и очистите файл конфигурации.boto, чтобы добавить учетные данные AWS. Добавлены учетные данные AWS, взяв ссылку по указанной ссылке.
Затем выполните команду:
gsutil -m rsync -rd gs: // your-gcs-bucket s3: // your-s3-bucket
Скорость передачи данных составляет ~1 ГБ / с.
Надеюсь, это поможет. (Не забудьте прекратить вычислительный экземпляр, как только работа будет завершена)
Andrew Irwin, вы можете использовать команды AWS в Google Shell. В Google Shell уже установлен Docker, поэтому следуйте инструкциям по установке Docker AWS, и вы сможете использовать такие команды AWS:
docker run --rm -it команда amazon / aws-cli
Сначала вам нужно настроить так:
docker run --rm -it amazon / aws-cli configure
Тогда вы можете запустить код gsutil rsync, опубликованный другими пользователями. Если вам нужно больше скорости, вы можете создать виртуальную машину в GCP. Следуйте инструкциям Linux, чтобы установить AWS CLI, а затем выполните команды configure / gsutil rsync.
Такие инструменты, какgsutil
иaws s3 cp
не будет использовать многокомпонентную загрузку/выгрузку, поэтому будет иметь низкую производительность для больших файлов.
Skyplane — гораздо более быстрая альтернатива для передачи данных между облаками (до 110x для больших файлов). Вы можете передать данные с помощью команды:
skyplane cp -r s3://aws-bucket-name/ gcs://google-bucket-name/
(отказ от ответственности: я участник)
Может быть, я могу предложить вам еще один способ экспорта ваших данных. Используйте инструмент CloudBerry, который вы устанавливаете на Google VW или Amazon EC2a, а затем настраиваете его для передачи данных из Google в S3. Что вы думаете о пути?
Для большого количества больших файлов (более 100 МБ) могут возникнуть проблемы с повреждением каналов и другие неприятности, вероятно, из-за требований к загрузке (как упоминал Pathead ).
В этом случае вам остается просто загрузить все файлы на свой компьютер и загрузить их обратно. В зависимости от вашего соединения и объема данных может быть более эффективным создать экземпляр виртуальной машины, чтобы использовать высокоскоростное соединение и возможность запускать его в фоновом режиме на другом компьютере, чем ваш.
Создайте виртуальную машину (убедитесь, что у учетной записи службы есть доступ к вашим корзинам), подключитесь через SSH и установите AWS CLI (
apt install awscli
) и настройте доступ к S3 (
aws configure
).
Запустите эти две строки или сделайте их сценарием bash, если вам нужно скопировать много сегментов.
gsutil -m cp -r "gs://$1" ./
aws s3 cp --recursive "./$1" "s3://$1"
(Лучше использовать
rsync
в общем, но
cp
было быстрее для меня)