0

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

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

我可以使用等待/通知,但我仍然需要总计数以便正确设置标志。

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

更新#2(合并处理器)根据配置,合并处理器应该每 300 秒释放一次文件。在我的用例中,输入文件总数为 2000,但它们的速度很慢(大约 200 秒)。所以下面的配置应该足以合并所有文件。但它不起作用。我仍然可以看到合并处理器让文件以更小的间隔进入。 在此处输入图像描述

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

在此处输入图像描述

4

1 回答 1

1

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

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

于 2018-09-10T13:55:23.570 回答