Получить общее количество файлов от процессора fetchhdfs

Есть ли способ получить общее количество файлов от одного запуска процессора FetchHDFS?

мой вариант использования ==> читать все файлы из каталога (hdfs), объединять их и затем выполнять дальнейшую обработку. Но чтобы остановить процессор слияния (пока все файлы не будут в очереди), мне нужно количество файлов, чтобы установить «Минимальное количество записей».

Я могу использовать wait / notify, но тогда мне все еще нужно общее количество, поэтому установите флаги правильно.

В любом случае, не кажется логичным иметь это в качестве атрибута для FetchHDFS или какого-либо обработчика листинга файлов.

Обновление №2 (процессор слияния) Согласно конфигурации, процессор слияния должен пропускать файл каждые 300 секунд. В моем случае общее количество входных файлов составляет 2000, но они поступают медленно (около 200 секунд). Итак, приведенная ниже конфигурация должна быть достаточно хорошей, чтобы объединить все файлы. Но это не работает. Я все еще вижу, как процессор слияния позволяет файлам идти с гораздо меньшим интервалом. enter image description here

Обновление # 3 == общий размер всех файлов 1600 составляет 318 КБ, что намного меньше, чем размер бункера 128 МБ

enter image description here

0
0
515
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ListHDFS/FetchHDFS не предоставляет количество файлов, взятых при конкретном запуске. Однако вы можете использовать ExecuteScript или UpdateAttribute и с помощью Wait/Notify, и заставить его работать.

Самым простым решением, которое я предлагаю, является то, что MergeContent также принимает одно необязательное свойство, называемое Max Bin Age, вы можете настроить здесь некоторые единицы времени, такие как 2 mins или 30 secs, и установить для Minimum Number of Entries более высокое число. Таким образом, независимо от того, что размер очереди не соответствует настроенному номеру в Min. number of entries, по истечении времени, настроенного для Max bin age, эти файлы из очереди будут взяты и объединены вместе. Однако это может потребовать некоторых предположений и экспериментов, чтобы получить правильную конфигурацию.

Я настроил процессор слияния на более высокий предел, поэтому все файлы могут быть объединены (я обновил свой исходный вопрос). Это не работает.

Rakesh Prasad 10.09.2018 18:08

Это потому, что «Макс. Размер группы »настроен.

Sivaprasanna Sethuraman 11.09.2018 05:42

Когда вы настраиваете Min. Group Size и Max. Group Size, потоковые файлы, превышающие максимальный размер, будут обрабатываться в собственном бункере, поэтому вы видите меньшее количество файлов, объединенных вместе.

Sivaprasanna Sethuraman 11.09.2018 05:55

общий размер всех потоковых файлов (1600) составляет ~ 300 КБ. и размер корзины составляет 128 МБ, поэтому не уверен, почему процессор Merge позволяет меньшей группе уйти. Я ожидаю 1 слияние, у меня получается 178. см. Обновление №3 (в исходном сообщении).

Rakesh Prasad 11.09.2018 06:20

У меня нет полных знаний о свойствах Min. Group Size и Max. Group Size. У меня был странный опыт их использования. В моих сценариях использования никогда не было необходимости настраивать эти свойства. Я бы посоветовал вам написать на users@nifi.apache.org для большей ясности.

Sivaprasanna Sethuraman 11.09.2018 06:33

наконец-то сработало. Остальные значения Minimum Number of Entries = 1 остались такими же, как на скриншоте в обновлении №3 (исходный пост). Спасибо за ваше предложение. Это помогло мне с проблемой, хотя получение количества файлов из listHDFS / File по-прежнему является далекой мечтой :(

Rakesh Prasad 11.09.2018 07:35

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