GetFile / ListFile处理器的动态参数 - NiFi

时间:2017-10-04 16:30:41

标签: hdfs apache-nifi

我的工作流程如下所示。

  

ListenHTTP(我在这里得到一个目录名) - > SplitText - >   ExtractText(作为属性添加的目录名称)

此后,我将不得不使用该属性directoryname并提取该本地目录中的所有文件并将其放入HDFS。我理解GetFile / ListFile可以做到这一点,但我们如何为该处理器提供动态目录名?

1 个答案:

答案 0 :(得分:2)

不幸的是,GetFileListFile都是处理器,这意味着它们不接受传入的流文件。一般模式是使用静态输入目录值配置这些处理器,并允许它们从中读取并管理其状态。

在这种情况下,我认为您需要使用FetchFile,它接受​​传入的流文件并读取提供的文件路径。默认情况下,要提取的文件属性设置为${absolute.path}/${filename},这意味着它使用Apache NiFi Expression Language来解析这两个属性的值传入的流文件。您可以先将该流文件传递给ExecuteStreamCommand处理器,然后在该目录上执行ls,然后将结果拆分为单个流文件,每行一个文件名,并通过{{1}处理每个文件。 }。

我知道这不是执行任务最简洁的方法。另外两个建议是:

  1. Open a Jira请求处理器检索目录中的所有文件(在传入流文件接收时)并要求传入的流文件来确定目录。
  2. 使用FetchFile处理器。处理器只需从传入的流文件中提取属性,并使用Groovy / Ruby / Python /等。从目录中检索文件的设施,或执行目录列表并将单个流文件下游传递给ExecuteScript处理器。