S3 Multipart Загрузка с использованием NiFi - PullRequest
1 голос
/ 14 июня 2019

Я загружаю большой объем данных из реляционной базы данных в AWS S3.Поскольку том большой, я разбиваю его по нескольким SQL-запросам, создаю меньшие потоковые файлы, затем объединяю и загружаю в AWS S3.Есть ли способ загрузить эти куски файлов в AWS S3, а затем выполнить окончательное объединение после завершения всех загрузок для этой конкретной таблицы?

Используемый мной процессор PutS3Object имеет опцию многоэтапной загрузки, но мне кажется, что этот метод сначала предполагает, что сначала создается большой файл локально, а затем загрузка загружается кусками.Правильно ли мое понимание?Я пытаюсь избежать этого шага объединения меньших потоковых файлов в один перед загрузкой.

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Я бы порекомендовал вам разделить записи и добавить в конце переменную, указывающую, какой файл # находится в разбиении.Затем последовательно загружаем все в s3.

0 голосов
/ 20 июня 2019

В процессоре PutS3Object для загрузки файлов в AWS S3 используется метод putObject или метод множественной загрузки.За кулисами оба эти метода доступны как часть AWS SDK для Java.

Amazon S3 предлагает следующие параметры:

  • Загрузка объектов за одну операцию - с одним PUTОперация позволяет загружать объекты размером до 5 ГБ.
  • Загрузка объектов по частям - с помощью API многоэтапной загрузки можно загружать большие объекты размером до 5 ТБ.

В процессоре PutS3Object многокомпонентная загрузка включается только тогда, когда размер файла превышает пороговое значение, установленное с помощью атрибута Multipart Threshold .Если размер файла меньше порогового размера, то нет возможности для многоэтапной загрузки.

Есть ли способ загрузить эти фрагменты файлов в AWS S3, а затем выполнить окончательное объединение после всех загрузок дляэта конкретная таблица заполнена?

Могут быть способы, но не использование процессора PutS3Object.На самом деле, API многократной загрузки AWS S3 работает следующим образом - разбивает больший файл, загружает его по частям и объединяет в конце.

Я разбиваю его по нескольким SQL-запросам, создаю меньшие потоковые файлы,затем объединить и затем загрузить в AWS S3

Один из возможных способов - создать больший файл потока со всеми данными реляционной базы данных, если это возможно, вместо создания файлов меньшего потока и позволить процессору PutS3Object обрабатывать загрузку файла,

Многоэтапная загрузка состоит из трех этапов: инициируйте загрузку, загрузите части и завершите загрузку.Этот процесс сохраняет состояние, локально отслеживая идентификатор загрузки и загруженные части, после каждого шага, чтобы можно было возобновить большую загрузку с минимальными потерями, если процессор или кластер остановлен и перезапущен.

Надеюсь, этот ответ решит ваш запрос.

...