在Apache Nifi中将TimeLine添加到文件时出错

时间:2017-10-10 05:38:15

标签: apache-nifi

我正在使用HDP 2.5。我尝试为HDFS文件中的文件添加时间。为此,我使用GetHDFS-> UpdateAttribute-> PutHDFS。

首先我通过GetHDFS处理器从HDFS获取文件然后通过添加属性来更改UpdateAttribute中的文件格式"

$ {文件名} $ {现在():格式(" YYYY-MM-DD-HH:MM:SS.SSS' Z'")}。" 。最后我把文件放在HDFS中。在这个阶段我有一个问题,例如如果目标文件夹(在HDFS中)包含已经有时间线的文件。一旦我在结果中运行流程,同一个文件就会出现两个或多个时间线

包含已经过时间线的文件

enter image description here

Nifi文件流后包含两个时间轴

enter image description here

有谁能告诉我如何解决这个问题

2 个答案:

答案 0 :(得分:4)

如果您不想更改当前的工作流程,最好的选择可能是使用GetHDFS处理器中的“文件过滤器”属性来仅获取文件名中不包含日期的文件(假设您的文件有一些命名惯例)。另一种选择是将重命名的文件发送到另一个目录。

作为一般性评论,我建议使用ListHDFS和FetchHDFS处理器的组合,因为在使用NiFi群集时它是一种更有效的模式。然后,您可以在中间使用RouteOnAttribute来执行比“文件过滤器”选项更高级的过滤。

另一条评论:当您从HDFS下载数据然后将其上传回来时,您的方法并不是最高效的方法。 HDFS中的重命名/移动操作可能更清晰(或者首先具有正确的命名)。您可以使用WebHDFS接口使用NiFi中的InvokeHTTP处理器与ListHDFS处理器一起执行重命名。

答案 1 :(得分:1)

您可以使用Expression Langage删除以前的时间戳,然后添加当前时间戳。您可以使用几个字符串函数,例如substringBefore或substringAfter,具体取决于文件名的逻辑。

enter link description here