Apache nifi 在Apache Nifi中将时间线添加到文件时出错

Apache nifi 在Apache Nifi中将时间线添加到文件时出错,apache-nifi,Apache Nifi,我使用的是HDP2.5。我尝试为位于HDFS文件中的文件添加时间。为此,我使用GetHDFS->UpdateAttribute->PutHDFS 首先,我通过GetHDFS处理器从HDFS获取文件,然后通过添加属性更改UpdateAttribute中文件的格式” ${filename}.${now():格式(“yyyy-MM-dd-HH:MM:ss.SSS'z')。最后,我将文件放入HDFS中。在这个阶段,我有一个问题,例如,如果目标文件夹(在HDFS中)包含已经有时间线的文件。一旦我在结果中运

我使用的是HDP2.5。我尝试为位于HDFS文件中的文件添加时间。为此,我使用GetHDFS->UpdateAttribute->PutHDFS

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

${filename}.${now():格式(“yyyy-MM-dd-HH:MM:ss.SSS'z')。最后,我将文件放入HDFS中。在这个阶段,我有一个问题,例如,如果目标文件夹(在HDFS中)包含已经有时间线的文件。一旦我在结果中运行flow,同一个文件就会出现两个或多个时间线

已包含时间线的文件

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


有人能告诉我如何解决这个问题吗?如果您不想更改当前的工作流,最好的选择可能是使用GetHDFS处理器中的“文件过滤器”属性,仅获取文件名中不包含日期的文件(假设您的文件具有某种命名约定)。另一个选项是在另一个目录中发送重命名的文件

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


另一条评论:您的方法不是最有效的方法,因为您正在从HDFS下载数据,然后将其上载回。HDFS中的重命名/移动操作可能会更干净(或者首先有一个正确的命名)。您可以使用NiFi中的InvokeHTTPProcessor与ListHDFS processor结合使用WebHDFS接口来执行重命名。

如果您不想更改当前工作流,最好的选择可能是使用GetHDFS processor中的“File filter”属性来仅获取文件名中不包含日期的文件(假设您的文件具有某种命名约定)。另一个选项是在另一个目录中发送重命名的文件

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


另一条评论:您的方法不是最有效的方法,因为您正在从HDFS下载数据,然后将其上载回。HDFS中的重命名/移动操作可能会更干净(或者首先有一个正确的命名)。您可以使用NiFi中的InvokeHTTPProcessor与ListHDFS processor结合使用WebHDFS接口来执行重命名。

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


您可以使用Expression Langage删除上一个时间戳,然后添加当前时间戳。根据文件名的逻辑,您可以使用多个字符串函数,例如substringBefore或substringAfter