Apache Nifi:使用GetFile将文件传递到ExecuteProcess

时间:2017-01-31 19:23:51

标签: apache-nifi

我有一个python脚本,它接受命令行参数来解密文件。要执行的python命令如下所示:

python decrypt.py -f "file_to_decrypt.enc" -k "private_key_file.txt"

我正在尝试使用GetFile中的NiFi处理器来挑选这些文件,因为我可以在日志中看到文件名,因此我们可以选择这些文件。

另一方面,我有一个ExecuteProcess进程设置来运行上面提到的python脚本。但是我需要将文件名传递到ExecuteProcess以使Python脚本工作。所以我的问题是,如何将GetFile进程中的文件传输到ExecuteProcess process中的Apache NiFi

1 个答案:

答案 0 :(得分:6)

您可以使用ExecuteStreamCommand处理器代替ExecuteProcess。此处理器接受传入的流文件,可以访问属性和内容,而ExecuteProcess处理器,不接受传入的流文件。

我不知道你是否需要GetFile(获取文件的内容);尝试ListFileRouteOnAttribute过滤您想要的两个文件名。将两个成功的列表合并到一个包含MergeContent的流文件中,然后使用${filename}属性和表达式语言将命令参数填充为x.enc和{{1} }。

<强>更新

我构建了a template,执行以下任务:

  1. 生成示例密钥文件(非有效密钥)
  2. 生成示例加密数据文件(无效密文)
  3. 使用y.txtListFileUpdateAttributeRouteOnAttributeMergeContent执行命令行Python解密(由ExecuteStreamCommand模拟)
  4. 注意,这使用的表达式语言函数echo目前在NiFi ifElse()但尚未发布。它是 1.2.0 版本的一部分,但如果您从master构建,则可以立即使用它。

    NiFi ExecuteStreamCommand Template

    我仍然认为master或特别是EncryptContent更紧凑,但这有效。