PutFile附加文件

Big*_*Bug 5 apache-nifi

Nifi的新手!

我想知道nifi中是否有办法使用诸如“ PutFile”之类的处理器并将其写入单个文件(将数据追加到此文件,或覆盖此文件中的数据)-而不是创建多个文件不同的文件?我是否需要使用另一个处理器才能完成此任务?

Ide*_*ty1 7

对于那些不想覆盖文件中的数据但想要附加数据的人

使用 ExecuteStreamCommand 处理器附加到单个文件

使用 putFile 处理器是不可能的,但您可以使用ExecuteStreamCommand处理器来完成此操作。

在命令参数中放置要记录的属性,以分隔符分隔 ${aatr1};${aatr2};${attr3}

在命令路径中输入 bash 脚本的绝对路径:/path/logger.sh

记录器.sh :

#!/bin/bash
echo "$1|$2|$3">> /path/attributes.log
Run Code Online (Sandbox Code Playgroud)

attibutres.log 将逐行附加三个属性。确保 bash 脚本可以通过 nifi 执行。

做一个 chmod 777 logger.sh

使用 ExecuteScript Processor 附加到单个文件

试试这个 ECMA 脚本:

var flowFile = session.get();
var File = Java.type("java.io.RandomAccessFile");
if (flowFile != null) {
    var filename = flowFile.getAttribute("filename");
    /// write to file
    var filePath = "/path/attributes.log" ;
    flowFile = session.putAttribute(flowFile, "filePath", filePath);
     var file = new File(filePath, "rws");
     file.seek(file.length());
        file.write(filename.getBytes());
        file.write("\n".getBytes());
        file.close();
    // Finish by transferring the FlowFile to an output relationship
    session.transfer(flowFile, REL_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)


JDP*_*101 3

目前无法将数据追加到文件中,但您可以使用 PutFile 覆盖该文件。

PutFile 处理器使用 FlowFile 上的属性“文件名”将文件写入磁盘。因此,如果您将 UpdateAttribute 处理器放在 PutFile 之前,将所有传入的 FlowFile 更新为相同的“文件名”,则 PutFile 处理器会将它们全部写入磁盘上,并使用相同的文件名。

要使用 PutFile 执行此操作,请确保将处理器属性“冲突解决策略”配置为“替换”。