Экспорт данных из 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 Инструмент, мы можем выполнять широкий спектр задач по управлению корзинами и объектами, в том числе:

  1. Создание и удаление корзин.
  2. Загрузка, скачивание и удаление объектов.
  3. Список ведер и объектов. Перемещение, копирование и переименование объектов.

мы можем копировать данные из корзины 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 было быстрее для меня)

Другие вопросы по тегам