Передача большой коллекции небольших файлов - PullRequest
0 голосов
/ 16 декабря 2018

Обычные методы передачи данных (утилиты scp, http и ftp, такие как curl или wget) работают хорошо, когда ваши данные находятся в диапазоне МБ или даже ГБ, но когда у вас есть очень большие коллекции файлов небольшого размера (например,10 КБ), передача будет очень медленной, и пропускная способность не будет использоваться вообще.

При получении одного файла на S1 два сервера (S1, S2) должны немедленно отправить его на S2.

Есть ли у вас какие-либо идеи по поводу использования некоторых инструментов DSP, например Apache Flink или NIFI?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы можете использовать Flink для непрерывного копирования файлов, да - хотя я обычно не вижу такого сценария использования, так как все, что вы делаете - это перемещаете байты, а не обрабатываете данные (где Flink работает лучше всего).

Чтобы сделать это с Flink, вы должны установить (Rich)SourceFunction, который непрерывно контролирует исходный каталог S3 и выдает путь к любому новому файлу.Тогда вы, вероятно, будете использовать AsyncFunction для асинхронного копирования файла из текущего в новое местоположение.

- Ken

0 голосов
/ 16 декабря 2018

Я не использовал Apache-Flink, но при использовании NiFi этот вариант использования довольно прост (просто перетащите, сбросьте и настройте 3 процессора)

Поток:

1.ListFile //list files in S1 server
    --> Success Connection (Load Balance Strategy (or) Remote Processor Group)
2.FetchFile //fetch the file from S1 Server
    --> Success Connection
3.PutFile //send the file to S2 server
  • Мы собираемся запускать процессор ListFile/ListSFTP..etc все время для постепенного вывода списка файлов в каталоге.

  • Как только мы перечислим файлы, которые мы можем сделать load balance and distribute работа на всех узлах в кластере

  • Фактическая выборка файлов будет выполнена FetchFileПроцессор динамически основан на атрибутах , связанных с файлом потока.

  • Используйте соединение success от процессора FetchFile дляперенести файл в S2 Sever , используя PutFile/PutSFTP..etc процессор.

Пожалуйста, обратитесь к этой ссылке для получения более подробной информации/ использование вышеуказанного потока.

...