Nifi的新手!
我想知道nifi中是否有办法使用诸如“ PutFile”之类的处理器并将其写入单个文件(将数据追加到此文件,或覆盖此文件中的数据)-而不是创建多个文件不同的文件?我是否需要使用另一个处理器才能完成此任务?
对于那些不想覆盖文件中的数据但想要附加数据的人。
使用 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)
目前无法将数据追加到文件中,但您可以使用 PutFile 覆盖该文件。
PutFile 处理器使用 FlowFile 上的属性“文件名”将文件写入磁盘。因此,如果您将 UpdateAttribute 处理器放在 PutFile 之前,将所有传入的 FlowFile 更新为相同的“文件名”,则 PutFile 处理器会将它们全部写入磁盘上,并使用相同的文件名。
要使用 PutFile 执行此操作,请确保将处理器属性“冲突解决策略”配置为“替换”。
归档时间: |
|
查看次数: |
8661 次 |
最近记录: |