Nifi列出来自多个路径的文件,并将它们路由到各自的目的地

时间:2018-05-10 15:22:56

标签: hdfs apache-nifi

我在不同位置有3个文件,我使用3个列表文件处理器,然后是获取文件处理器。现在我想将这些文件路由到各自的目的地,这对于所有3个文件都是不同的。需要一些帮助来解决这个问题。

由于

2 个答案:

答案 0 :(得分:3)

根据您上面提到的路由逻辑,您可以将流程设为:

$("#menu")

ListFile(s) -> FetchFile(s) -> RouteOnAttribute -> PutFile(s) 中,您可以使用NiFi Expression Language支持。例如,您可以有三个属性:

RouteOnAttribute

<强>解释

您将有三个destination.one : ${filename:startsWith('abc')} destination.two : ${filename:startsWith('def')} destination.three : ${filename:startsWith('xyz')} 处理器连接到三个ListFile处理器。然后将所有三个处理器的FetchFile输出连接到Success,在定义上述三种关系后,您可以将三种关系连接到相关的RouteOnAttribute处理器。

在上面的示例中,PutFile将名称以RouteOnAttribute开头的文件路由到关系abc,以destination.one开头的文件名转到def等等。

enter image description here

enter image description here

答案 1 :(得分:0)

您可以使用简单的if else语句,并在flowfile属性上设置目标,因此可以在单个处理器中执行相同的操作。您可以根据单个处理器上的线程数进一步调整它们,以获得干净的布局。 PFB示例假定hostname1将文件放入hostnameX / path1,hostname2将文件放入hostnameY / path2:

您的putfile路径的新属性= $ {sftp.remote.hostname:equals('hostname1'):ifElse('hostnameX / path1','hostnameY / path2')}

在n个主机名及其对应的目的地的情况下,您可以进一步嵌套ifElse并将其新属性用作目的地。