GetFile/ListFile 处理器的动态参数 - NiFi
Dynamic parameter for GetFile/ListFile processor - NiFi
我的工作流程如下。
ListenHTTP(i get a directory name here) --> SplitText -->
ExtractText(directory name added as attribute)
现在,在此之后我将不得不使用该属性目录名并提取该本地目录中的所有文件并将其放入 HDFS。我知道 GetFile/ListFile 可以做到这一点,但我们如何为该处理器提供动态目录名称?
不幸的是,GetFile
和 ListFile
都是 source 处理器,这意味着它们不接受传入的流文件。一般模式是使用静态 Input Directory 值配置这些处理器,并允许它们从中读取并管理它们的状态。
在这种情况下,我相信您需要使用 FetchFile
,它接受传入的流文件并读取提供的文件路径。默认情况下,File to Fetch 属性 设置为 ${absolute.path}/${filename}
,这意味着它使用 Apache NiFi Expression Language 来解析这两个 [=27] 的值=] 属性 在传入的流文件上。您可以先将该流文件传递给 ExecuteStreamCommand
处理器,然后在目录上执行 ls
,然后将结果拆分为每行一个文件名的单独流文件,并通过 FetchFile
.
我知道这不是执行任务的最简明方式。另外两个建议是:
- Open a Jira 请求处理器检索目录中的所有文件(在收到传入流文件时)并需要传入流文件来确定目录。
- 使用
ExecuteScript
处理器。处理器将简单地从传入的流文件中提取属性并使用 Groovy/Ruby/Python/etc。从目录中检索文件的设施,或执行目录列表并将单个流文件下游传递到 FetchFile
处理器。
我的工作流程如下。
ListenHTTP(i get a directory name here) --> SplitText --> ExtractText(directory name added as attribute)
现在,在此之后我将不得不使用该属性目录名并提取该本地目录中的所有文件并将其放入 HDFS。我知道 GetFile/ListFile 可以做到这一点,但我们如何为该处理器提供动态目录名称?
不幸的是,GetFile
和 ListFile
都是 source 处理器,这意味着它们不接受传入的流文件。一般模式是使用静态 Input Directory 值配置这些处理器,并允许它们从中读取并管理它们的状态。
在这种情况下,我相信您需要使用 FetchFile
,它接受传入的流文件并读取提供的文件路径。默认情况下,File to Fetch 属性 设置为 ${absolute.path}/${filename}
,这意味着它使用 Apache NiFi Expression Language 来解析这两个 [=27] 的值=] 属性 在传入的流文件上。您可以先将该流文件传递给 ExecuteStreamCommand
处理器,然后在目录上执行 ls
,然后将结果拆分为每行一个文件名的单独流文件,并通过 FetchFile
.
我知道这不是执行任务的最简明方式。另外两个建议是:
- Open a Jira 请求处理器检索目录中的所有文件(在收到传入流文件时)并需要传入流文件来确定目录。
- 使用
ExecuteScript
处理器。处理器将简单地从传入的流文件中提取属性并使用 Groovy/Ruby/Python/etc。从目录中检索文件的设施,或执行目录列表并将单个流文件下游传递到FetchFile
处理器。