【问题标题】:How to delete file from FTP server using NiFi processor?如何使用 NiFi 处理器从 FTP 服务器中删除文件?
【发布时间】:2020-10-29 10:57:33
【问题描述】:

GetFTP 处理器有这个能力,但我应该在流程成功完成后才从 FTP 服务器删除文件。我可以在阅读时使用 GetFTP 将其删除,如果发生错误,我可以将其重新放入,但我认为这不是最佳解决方案。 感谢任何帮助。

【问题讨论】:

标签: ftp apache-nifi


【解决方案1】:

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

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

您可以在某处(PutFile、PutFTP、PutHDFS 等)写入失败的流文件/记录,而不是在失败的情况下重新使用整个文件。

话虽如此,直接回答问题;

没有直接从 FTP 删除的处理器。

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

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

或者,您可以使用 ListFTP 和 FetchFTP,而不是 GetFTP,然后使用移动文件完成策略将处理后的文件移动到存档目录。如果出现错误,您将能够从存档目录中检索文件。然后随心所欲地清理存档。

【讨论】:

  • ExecuteStreamCommand 解决了我的问题。创建一个小脚本并使用来自 NiFi 的参数执行它:#!/bin/bash HOST=$1 USER=$2 PASSWORD=$3 ftp -inv $HOST <<EOF user $USER $PASSWORD cd /sources delete $4 bye EOF
猜你喜欢
  • 2011-10-11
  • 2018-09-15
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
相关资源
最近更新 更多