2017-07-28 93 views
0

我想用Nifi从SFTP服务器获取文件。潜在的文件可能很大,所以我的问题是如何避免在写入文件时获取文件。我计划使用ListSFTP + FetchSFTP,但如果可以避免复制部分写入的文件,也可以使用GetSFTP。Nifi:如何避免复制部分写入的文件

谢谢

回答

2

除了Andy的坚实答案,您还可以通过使用ListSFTP/FetchSFTP处理器对执行一些基于元数据的路由来更加灵活。

在ListSFTP之后,每个流文件将具有诸如'file.lastModifiedTime'等属性。您可以在这里阅读关于它们的信息https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.3.0/org.apache.nifi.processors.standard.ListSFTP/index.html

您可以在List和Fetch之间放置一个RouteOnAttribute进程,以检测至少基于报告的上次修改时间为“太新”的对象。你可以将它们路由到一个只是缓慢通过的处理器,以故意等待一段时间。然后,您可以通过第一台路由器运行它们,直到它们“足够老”。现在,这无疑是一种高级用户方法,但它的确具有很大的灵活性和控制力。我在这里提到的方法并不是愚蠢的证据,因为源系统可能不会正确地报告最后一个mod时间,它可能并不意味着源文件正在被写入等等。但是如果你不能做到这一点,它会给你额外的选择绝对正确的事情上面安迪谈论。

2

如果你有超过该文件中写道,一个共同的模式来解决这个问题是先写的文件与特定的命名结构,如年初.过程控制。成功写入操作后,文件被重命名而没有.,并且被处理器拾取。 GetSFTPListSFTP都有一个名为的处理器属性忽略虚线文件,默认情况下它被设置为true,意味着这些处理器将不运行或返回以点字符开头的文件。