【问题标题】:Error while adding TimeLine to file in Apache Nifi在 Apache Nifi 中将 TimeLine 添加到文件时出错
【发布时间】:2017-10-10 20:19:03
【问题描述】:

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

首先我通过 GetHDFS 处理器从 HDFS 获取文件,然后通过添加属性“

在 UpdateAttribute 中更改文件格式

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

已经包含时间线的文件

Nifi 文件流后包含两条时间线

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

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您可以使用表达式语言删除之前的时间戳,然后添加当前时间戳。您可以根据文件名的逻辑使用多个字符串函数,例如 substringBefore 或 substringAfter。

      enter link description here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多