等待所有文件到达-NiFi

Wait for all the files arrival-NiFi

Nifi 中是否有任何处理器等待所有文件到达,然后将这些文件放入 HDFS。

例如: 如果总共有 5 个文件要使用 SFTP 获取,但我们只收到 3 个文件,我希望 NiFi 等到 5 个文件到达,然后使用 PUTHDFS 将这 5 个文件放入 HDFS。

感谢您的回答

问题是,你怎么知道所有的文件都已经到了? 总是静态5个文件吗?

如果绝对总是 5 个文件,则只需使用 MergeContent 并将最小和最大条目数设置为 5。这意味着所有文件将等待,直到正好有 5 个文件等待合并。

但这很难改变。

为什么要等5个文件全部存入HDFS?

您是否要防止小文件问题?

如果是这样,您无需等待所有 5 个文件,只需使用 Merge 并设置最小文件大小以将文件存储到最小值,最坏情况超时。

或者,PutHDFS 有一个 Conflict Resolution Strategy 属性 可以设置为 append 只要文件名相同 - 你可以只 UpdateAttribute 并将文件名设置为相同的名称,然后在文件到达时追加。

您可以将 List* 个处理器与 Record Writer 一起使用,并使用 MergeRecord 个处理器来等待特定数量的文件。

  1. 使用 ListSFTP 处理器。设置 Record Writer 属性。你可以使用任何人。
  2. success 连接到 MergeRecord 处理器,将最大和最小 bin 大小设置为您要等待的文件数。
  3. 现在 merge 关系将有一个包含文件列表的流文件。将它们拆分为单独的文件并进行处理。

看看Additional Details of ListSFTP processor。它详细说明了如何等待 batch 完成流程。