Нифи: Нужно разъяснение по процессору Merge Content - PullRequest
1 голос
/ 01 июня 2019

Потому что я не думаю, что это работает так, как мой супервайзер думает, что это работает.

Мы берем серию около 8 файлов CSV с FTP, и эти файлы довольно малы (менее 1 МБ),Он (думаю, вполне справедливо) обеспокоен тем, что размер кластера в HDFS будет потрачен впустую.Поэтому он хочет использовать процессор Merge Content для решения этой проблемы.Кажется, он верит, что процессор Merge Content будет «сопоставлять» файлы с одинаковыми именами, создавая один больший файл.

Чтобы уточнить: он хочет, чтобы это работало, если сегодня выйдет «sales_report.csv»и в каталоге уже есть «sales_report.csv», он хочет, чтобы новые данные из сегодняшнего «sales_report.csv» были добавлены как новые строки в существующий файл.Надеюсь, это имеет смысл.

Вместо этого я получаю совсем другие результаты.У меня настроен поток так, что он берет файлы с FTP, создает каталог в HDFS на основе папки, а затем подпапку на основе года.Когда я оставляю процессор MC вне этого, все это работает отлично.Когда я вставляю процессор MC, я получаю три файла - один из них имеет свое первоначальное имя, а два имеют длинную строку случайных символов.Мы используем настройки по умолчанию для процессора Merge Content.

Исходя из того, что я описал выше, звучит ли это так, как будто мы ищем MC-процессор?

1 Ответ

1 голос
/ 01 июня 2019

Процессор MergeContent работает путем объединения нескольких потоковых файлов в один потоковый файл.Это , а не - это то же самое, что добавление новых данных в существующий файл, хранящийся в HDFS (что хочет ваш менеджер).

Чтобы выполнить это, у вас есть несколько вариантов:

  1. Сохраните текущий поток без процессора MergeContent;у вас все еще будет проблема "маленьких файлов" с HDFS.
  2. Использование SQL-подобного интерфейса для HDFS, например Hive (и дополнительно HBase ( почему )).Затем вы можете использовать новые данные (сегодня sales_report.csv ), обрабатывать строки в этом файле как NiFi записи и сохранять их в соответствующей таблице Hive.(эффективно выполняя операцию append ).
  3. Извлечение существующего sales_report.csv из HDFS, объединение содержимого с новым содержимым с использованием MergeContent и сохранениеновый объединенный контент обратно в HDFS.Это довольно расточительная операция и не рекомендуется.(См. Итеративная обработка в статье Алан Гейтс " Свинья и Улей в Yahoo! )."

Какой вариант вы выберете, зависит от ваших конкретных требований:

  • Нужно ли хранить данные в файле того же в HDFS, илипросто быть доступным в том же каталоге?
  • Нужно ли хранить данные в исходном формате файла CSV, или приемлемо табличное хранилище?
  • Насколько велики "существующие" данные, хранящиеся вHDFS против новых поступающих данных?
...