Apache nifi ApacheNIFI:使用GetFile将文件导入ExecuteProcess

Apache nifi ApacheNIFI:使用GetFile将文件导入ExecuteProcess,apache-nifi,Apache Nifi,我有一个python脚本,它接受命令行参数来解密文件。要执行的python命令如下所示: python decrypt.py-f“file_to_decrypt.enc”-k“private_key_file.txt” 我正在尝试使用NiFi中的GetFile处理器拾取这些文件,该处理器负责拾取这些文件,因为我可以在日志中看到文件名 另一方面,我有一个ExecuteProcess进程设置来运行上面提到的python脚本。但是,我需要将文件名传递到ExecuteProcess,Python脚本才能

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

python decrypt.py-f“file_to_decrypt.enc”-k“private_key_file.txt”

我正在尝试使用
NiFi
中的
GetFile
处理器拾取这些文件,该处理器负责拾取这些文件,因为我可以在日志中看到文件名

另一方面,我有一个
ExecuteProcess
进程设置来运行上面提到的python脚本。但是,我需要将文件名传递到
ExecuteProcess
,Python脚本才能工作。所以我的问题是,如何将文件从
GetFile
进程导入
apachenifi
中的
ExecuteProcess进程?

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

我不知道您是否需要
GetFile
(获取文件的内容);请尝试
ListFile
RouteOnAttribute
筛选所需的两个文件名。使用
MergeContent
将两个成功的列表合并到一个流文件中,然后使用
${filename}
属性和表达式语言使用
x.enc
y.txt
填充命令参数

更新

我构建了一个执行以下任务的系统:

  • 生成示例密钥文件(不是有效密钥)
  • 生成示例加密数据文件(无效密码文本)
  • 使用
    ListFile
    UpdateAttribute
    RouteOnAttribute
    MergeContent
    ExecuteStreamCommand
    执行命令行Python解密(由
    echo
    模拟)
  • 注意,这使用了一个表达式语言函数
    ifElse()
    ,该函数当前位于NiFi
    master
    中,但尚未发布。它是1.2.0版本的一部分,但是如果您从
    master
    构建,现在就可以使用它了


    我仍然认为
    EncryptContent
    或者特别是
    ExecuteScript
    更紧凑,但这是可行的

    对于非常大的文件(50GB及以上),这仍然是一个好主意吗?这会更好,因为您根本没有将文件的内容(这是
    GetFile
    所做的)加载到NiFi中。虽然NiFi使用流式处理大数据并尊重堆,但内容存储库仍然需要包含这些数据,性能将受到影响。因此,我已经完成了
    MergeContent
    步骤,现在我需要在
    ExecuteStreamCommand
    属性窗口中打开合并的文件。我查看了使用文件和属性,但据我所知,它们并没有提到从合并文件中选择文件。当我执行类似于
    ${filename}
    的操作时,它只打印合并文件的
    文件名
    ,我不确定如何查看其内容。因此,基本上,我如何从合并的流文件中指向
    x.enc
    y.txt
    ?我添加了一个模板和我构建的屏幕截图来解释它。太棒了,我没有使用
    ifElse()
    ,但当我只使用
    UpdateAttribute
    并在那里添加逻辑时,整个事情都很顺利。谢谢