从FetchHDFS处理器获取文件总数

时间:2018-09-10 08:36:17

标签: apache-nifi kylo

这是从FetchHDFS处理器的单次运行中获取文件总数的一种方法吗?

我的用例是==>从目录(hdfs)中读取所有文件,并合并它们,然后进行进一步处理。但是要暂停合并处理器(直到所有文件都在队列中),因此我需要文件计数来设置“最小条目数”。

我可以使用wait / notify,但是我仍然需要总数,因此请正确设置标志。

无论如何,将其作为FetchHDFS或任何文件列表处理器的属性听起来不合逻辑。

Update#2(合并处理器)根据配置,合并处理器应每300秒释放一次文件。在我的用例中,输入文件总数为2000,但是输入速度很慢(大约200秒)。因此,下面的配置应该足以合并所有文件。但这是行不通的。我仍然可以看到合并处理器让文件间隔更短。 enter image description here

更新#3 ==所有1600个文件的总大小为318 KB,远远小于bin大小的128 MB

enter image description here

1 个答案:

答案 0 :(得分:1)

ListHDFS/FetchHDFS不提供特定运行中拾取的文件数。但是,您可以使用ExecuteScriptUpdateAttribute并在Wait/Notify的帮助下使其正常工作。

我建议的最简单的解决方案是,MergeContent还具有一个称为Max Bin Age的可选属性,您可以在此处配置一些时间单位,例如2 mins30 secs并进行设置Minimum Number of Entries到更高的数字。这样,无论队列大小与Min. number of entries中配置的数量不匹配,一旦为Max bin age配置的时间过去,这些排队的文件都将被拾取并合并在一起。不过,这可能需要一些假设和实验才能完成正确的配置。