等待所有文件到达-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
个处理器来等待特定数量的文件。
- 使用 ListSFTP 处理器。设置
Record Writer
属性。你可以使用任何人。
- 将
success
连接到 MergeRecord
处理器,将最大和最小 bin 大小设置为您要等待的文件数。
- 现在
merge
关系将有一个包含文件列表的流文件。将它们拆分为单独的文件并进行处理。
看看Additional Details of ListSFTP processor。它详细说明了如何等待 batch
完成流程。
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
个处理器来等待特定数量的文件。
- 使用 ListSFTP 处理器。设置
Record Writer
属性。你可以使用任何人。 - 将
success
连接到MergeRecord
处理器,将最大和最小 bin 大小设置为您要等待的文件数。 - 现在
merge
关系将有一个包含文件列表的流文件。将它们拆分为单独的文件并进行处理。
看看Additional Details of ListSFTP processor。它详细说明了如何等待 batch
完成流程。