2017-10-10 23 views
2

我正在使用HDP 2.5。我嘗試爲HDFS文件中的文件添加時間。爲此,我使用GetHDFS-> UpdateAttribute-> PutHDFS。將TimeLine添加到Apache Nifi中的文件時出錯

首先,我從HDFS通過GetHDFS處理器得到文件,然後我通過添加屬性更改文件的格式UpdateAttribute 「

$ {文件名} $ {NOW():格式(」 YYYY-MM-DD- HH:MM:ss.SSS'Z'原 「)}」。最後我把文件放在HDFS中。在這個階段,我有一個問題例如如果目標文件夾(在HDFS中)包含已經有時間線的文件。有一次,我跑在結果流兩個或多個時間線是存在於同一個文件

其中包含已時間線

enter image description here

Nifi文件的流程後

文件包含兩個時間表

enter image description here

誰能告訴我如何解決這個問題

回答

4

如果你不想要要更改當前的工作流程,最佳選擇可能是使用GetHDFS處理器中的「文件過濾器」屬性來僅獲取文件名中不包含日期的文件(假定您的文件具有某種命名約定)。另一種選擇是將重命名的文件發送到另一個目錄中。

作爲一般性評論,我建議使用ListHDFS和FetchHDFS處理器的組合,因爲在使用NiFi羣集時它是更高效的模式。然後,您可以在中間使用RouteOnAttribute進行比「文件過濾器」選項更高級的過濾。

另一種評論:當您從HDFS下載數據,然後將其上傳回來時,您的方法並不是最具性能的方法。 HDFS中的重命名/移動操作可能會更清晰(或者首先具有正確的命名)。您可以使用WebHDFS接口使用NiFi中的InvokeHTTP處理器與ListHDFS處理器一起執行重命名。

1

您可以使用表達式語言刪除以前的時間戳,然後添加當前的時間戳。您可以使用多個字符串函數,如substringBefore或substringAfter,您可以使用它們,具體取決於文件名的邏輯。

enter link description here

相關問題