2017-07-28 50 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,意味着這些處理器將不運行或返回以點字符開頭的文件。