如何使用 NiFi 处理器从 FTP 服务器删除文件?
How to delete file from FTP server using NiFi processor?
GetFTP 处理器有这个能力,但我应该在流程成功完成后从 FTP 服务器删除文件。我可以在阅读时用 GetFTP 删除它,如果发生错误,然后再把它放回去,但我认为这不是最佳解决方案。
感谢任何帮助。
问题在于如何定义流程 'finished'。
NiFi 设计用于连续流而不是 stop/start 流 - 因此 Get/FetchFTP 允许你在处理后 delete/move 文件 - 因为它期望继续 运行 并获得更多文件。
而不是 re-consuming 在失败的情况下整个文件,您可以在某处写入失败 FlowFiles/Records(PutFile、PutFTP、PutHDFS 等)。
话虽如此,直接回答问题;
没有直接处理器可以直接从 FTP 中删除。
作为解决方法,您可以添加一个额外的 GetFTP 与 Delete Original 和 auto-terminate Success 关系 - 这将再次使用该文件,但会立即删除 FlowFiles 并删除该文件。如果它们是大文件,这可能会产生大量不必要的网络流量。
或者,您可以使用 ExecuteStreamCommand 来执行可以联系并删除文件的脚本。您可以将 FTP 主机地址、文件路径和文件名作为参数从电调处理器传递给脚本。
或者,您可以使用 ListFTP 和 FetchFTP,而不是 GetFTP,然后使用移动文件完成策略将已处理的文件移动到存档目录。如果出现错误,您可以从存档目录中检索文件。然后根据需要处理清理存档。
GetFTP 处理器有这个能力,但我应该在流程成功完成后从 FTP 服务器删除文件。我可以在阅读时用 GetFTP 删除它,如果发生错误,然后再把它放回去,但我认为这不是最佳解决方案。 感谢任何帮助。
问题在于如何定义流程 'finished'。
NiFi 设计用于连续流而不是 stop/start 流 - 因此 Get/FetchFTP 允许你在处理后 delete/move 文件 - 因为它期望继续 运行 并获得更多文件。
而不是 re-consuming 在失败的情况下整个文件,您可以在某处写入失败 FlowFiles/Records(PutFile、PutFTP、PutHDFS 等)。
话虽如此,直接回答问题;
没有直接处理器可以直接从 FTP 中删除。
作为解决方法,您可以添加一个额外的 GetFTP 与 Delete Original 和 auto-terminate Success 关系 - 这将再次使用该文件,但会立即删除 FlowFiles 并删除该文件。如果它们是大文件,这可能会产生大量不必要的网络流量。
或者,您可以使用 ExecuteStreamCommand 来执行可以联系并删除文件的脚本。您可以将 FTP 主机地址、文件路径和文件名作为参数从电调处理器传递给脚本。
或者,您可以使用 ListFTP 和 FetchFTP,而不是 GetFTP,然后使用移动文件完成策略将已处理的文件移动到存档目录。如果出现错误,您可以从存档目录中检索文件。然后根据需要处理清理存档。