Apache nifi ApacheNIFI:使用GetFile将文件导入ExecuteProcess
我有一个python脚本,它接受命令行参数来解密文件。要执行的python命令如下所示: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 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()
,该函数当前位于NiFimaster
中,但尚未发布。它是1.2.0版本的一部分,但是如果您从master
构建,现在就可以使用它了
我仍然认为EncryptContent
或者特别是ExecuteScript
更紧凑,但这是可行的 对于非常大的文件(50GB及以上),这仍然是一个好主意吗?这会更好,因为您根本没有将文件的内容(这是GetFile
所做的)加载到NiFi中。虽然NiFi使用流式处理大数据并尊重堆,但内容存储库仍然需要包含这些数据,性能将受到影响。因此,我已经完成了MergeContent
步骤,现在我需要在ExecuteStreamCommand
属性窗口中打开合并的文件。我查看了使用文件和属性,但据我所知,它们并没有提到从合并文件中选择文件。当我执行类似于${filename}
的操作时,它只打印合并文件的文件名
,我不确定如何查看其内容。因此,基本上,我如何从合并的流文件中指向x.enc
或y.txt
?我添加了一个模板和我构建的屏幕截图来解释它。太棒了,我没有使用ifElse()
,但当我只使用UpdateAttribute
并在那里添加逻辑时,整个事情都很顺利。谢谢