我在使用HDFS List和Fetch处理器的NiFi流程的最后几天遇到了问题。
它们之间的队列显示超过一百万个流文件,总共大小为0 MB。
这非常令人困惑。如果我试图看到其中一个文件我能够列出它们,如果我点击信息底部我可以确认文件大小,但它似乎是空的。背压设置为100K,因此我无法理解文件数。
我尝试重新启动NiFi并删除文件,但问题又重新出现了。
点击部分流程的截图:
任何想法都会受到赞赏。
答案 0 :(得分:2)
此问题的ListHDFS
或任何List*
处理器不包含实际内容。它们只生成一个流文件,该文件引用配置的路径或资源中存在的文件。这些流文件是空的,因为它没有实际内容,但它们只携带与文件关联的关键元数据,如路径,名称,所有者,上次修改时间等,作为其流文件属性的一部分。您可以通过列出队列并导航到Attributes
部分来查看它们,所有这些元数据都将在那里。
List
处理器应与其Fetch
对应物一起使用。因此,您将ListHDFS
与FetchHDFS
,ListS3
与FetchS3Object
一起使用,依此类推。 Fetch处理器使用(传入流文件的)属性来实际读取文件或资源。这就是为什么在任何0 bytes
处理器的流文件输出中看到List
的原因
即使在您提供的屏幕截图中,FetchHDFS
也会从ListHDFS读取传入的流文件,并输出带有实际内容的文件,这些文件在附加的成功队列中可见截图(4.93 GB
)
答案 1 :(得分:0)
我无法解释为什么大小为0字节,但只能在队列超过阈值后才能进行背压。因此,如果ListHDFS在一次执行期间产生100万个流文件,那么直到100万个流文件进入队列之后,NiFi才能检测到应该使用背压。