我正在使用HDP 2.5。我尝试为HDFS文件中的文件添加时间。为此,我使用GetHDFS-> UpdateAttribute-> PutHDFS。
首先我通过GetHDFS处理器从HDFS获取文件然后通过添加属性来更改UpdateAttribute中的文件格式"
$ {文件名} $ {现在():格式(" YYYY-MM-DD-HH:MM:SS.SSS' Z'")}。" 。最后我把文件放在HDFS中。在这个阶段我有一个问题,例如如果目标文件夹(在HDFS中)包含已经有时间线的文件。一旦我在结果中运行流程,同一个文件就会出现两个或多个时间线
包含已经过时间线的文件
Nifi文件流后包含两个时间轴
有谁能告诉我如何解决这个问题
答案 0 :(得分:4)
如果您不想更改当前的工作流程,最好的选择可能是使用GetHDFS处理器中的“文件过滤器”属性来仅获取文件名中不包含日期的文件(假设您的文件有一些命名惯例)。另一种选择是将重命名的文件发送到另一个目录。
作为一般性评论,我建议使用ListHDFS和FetchHDFS处理器的组合,因为在使用NiFi群集时它是一种更有效的模式。然后,您可以在中间使用RouteOnAttribute来执行比“文件过滤器”选项更高级的过滤。
另一条评论:当您从HDFS下载数据然后将其上传回来时,您的方法并不是最高效的方法。 HDFS中的重命名/移动操作可能更清晰(或者首先具有正确的命名)。您可以使用WebHDFS接口使用NiFi中的InvokeHTTP处理器与ListHDFS处理器一起执行重命名。
答案 1 :(得分:1)
您可以使用Expression Langage删除以前的时间戳,然后添加当前时间戳。您可以使用几个字符串函数,例如substringBefore或substringAfter,具体取决于文件名的逻辑。