如何使用NiFi处理器从FTP服务器删除文件?

如何使用NiFi处理器从FTP服务器删除文件?,ftp,apache-nifi,Ftp,Apache Nifi,GetFTP处理器具有此功能,但我应该只有在流成功完成后才从FTP服务器删除文件。我可以在阅读的时候用GetFTP删除它,然后在出错的时候再放一次,但我认为这不是一个最佳的解决方案。 感谢您的帮助。问题在于如何定义“已完成”的流程 NiFi设计用于处理连续流,而不是停止/启动流-因此,Get/FetchFTP允许您在处理文件后删除/移动文件-因为它希望继续运行并提供更多文件 如果发生故障,您可以在某处写入失败的流文件/记录(PutFile、PutFTP、PutHDFS等),而不是重新使用整个文件

GetFTP处理器具有此功能,但我应该只有在流成功完成后才从FTP服务器删除文件。我可以在阅读的时候用GetFTP删除它,然后在出错的时候再放一次,但我认为这不是一个最佳的解决方案。
感谢您的帮助。

问题在于如何定义“已完成”的流程

NiFi设计用于处理连续流,而不是停止/启动流-因此,Get/FetchFTP允许您在处理文件后删除/移动文件-因为它希望继续运行并提供更多文件

如果发生故障,您可以在某处写入失败的流文件/记录(PutFile、PutFTP、PutHDFS等),而不是重新使用整个文件

也就是说,回答直接的问题

没有直接的处理器可以直接从FTP中删除

作为一种解决方法,您可以使用Delete Original添加一个额外的GetFTP并自动终止成功关系-这将再次使用该文件,但会立即删除流文件并删除该文件。如果它们是大文件,可能会产生大量不必要的网络流量

或者,您可以使用executestream命令来执行一个脚本,该脚本可以访问并删除文件。您可以将FTP主机地址、文件路径和文件名作为参数从ESC处理器传递给脚本


或者,您可以使用ListFTP和FetchFTP,而不是GetFTP,然后使用移动文件完成策略将处理过的文件移动到存档目录。如果出现错误,您可以从存档目录检索文件。然后按照您的意愿清理归档。

ExecuteStreamCommand解决了我的问题。创建一个小脚本并使用NiFi中的参数执行它:
#/bin/bash HOST=$1用户=$2密码=$3 ftp-inv$HOST有趣的挑战,我已经见过这种问题好几次了,决定创建一个改进建议: