2016-05-30 113 views
4

Nifi!PutFile附加文件

我想知道是否有方法在nifi中使用諸如「PutFile」之類的處理器並將其寫入單個文件(將數據附加到此文件或覆蓋此文件中的數據)而不是創建多個不同的文件?我需要使用另一個處理器來完成這個任務嗎?

回答

3

當前沒有辦法將數據附加到文件,但可以使用PutFile覆蓋文件。

PutFile處理器使用FlowFile上的屬性「filename」將文件寫入磁盤。因此,如果您在PutFile之前放置UpdateAttribute處理器,並將所有傳入的FlowFile更新爲相同的「文件名」,則PutFile處理器將在磁盤上將相同的文件名全部寫入。

要使用PutFile執行此操作,請確保將處理器屬性「衝突解決策略」配置爲「替換」。

2

對不起。這是新的。讓我再試一次...

LogAttribute處理器可能是一個選項,因爲它似乎提供了最接近文件追加的功能。但它看起來並不理想,因爲它提供了很少的指導輸出的選項。

如果您打算使用「開箱即用」處理器功能而不是開發類進行自定義,還可以嘗試另外兩種方法。使用ExecuteScript處理器來執行Jython,Groovy或JS腳本,該腳本修改輸出flowFile以僅包含所需的屬性。使用PutMongo或PutSQL處理器來更新持久數據庫資源。

另一種選擇,如果你沒有數據庫資源可供選擇:使用上面提到的ExecuteScript處理器,後面跟一個PutFile,它將一個唯一命名的文件名屬性輸出到一個目錄 - 比如$ {filename}。$ { UUID}。您將得到大量類似格式的文件 - 每個文件一個日誌記錄 - 然後您可以將它們彙總到一個文件中,以便使用Linux命令進行分析,或者在工作流程中使用最終的ExecuteScript處理器以便每次都進行卷起通過您的工作流程處理文件。最後一個可能不是一個好主意,因爲如果您的flowFiles流很高,是否會引入同步和寫入爭用問題尚不清楚。

+0

謝謝!這對正在尋找「開箱即用」處理器來執行此任務的人員很有幫助,正如您在回覆中提到的那樣。我實際上通過創建定製處理器來解決這個問題 – BigBug