Apache nifi 在Nifi ExecuteScript中导入模块
我不熟悉Nifi和python 我想执行我的python脚本。因此,使用ExecuteScript并尝试导入某些模块。我是这样进口的:Apache nifi 在Nifi ExecuteScript中导入模块,apache-nifi,Apache Nifi,我不熟悉Nifi和python 我想执行我的python脚本。因此,使用ExecuteScript并尝试导入某些模块。我是这样进口的: import json, sftp, paramiko 虽然我已经安装了sftp,但当我在Executescript中导入它时,它显示“无法处理会话。第1行没有名为sftp的模块” 导入paramiko时也会出现相同的错误。ExecuteScript和InvokeScriptedProcessor使用的“python”引擎实际上是Jython,而不是纯pyth
import json, sftp, paramiko
虽然我已经安装了sftp,但当我在Executescript中导入它时,它显示“无法处理会话。第1行没有名为sftp的模块”
导入paramiko时也会出现相同的错误。ExecuteScript和InvokeScriptedProcessor使用的“python”引擎实际上是Jython,而不是纯python。这意味着它无法加载本机模块(.so文件、编译的C文件等)。根据,paramiko使用Crypto,Crypto具有本机库,因此不能在Jython中使用(请参阅的底部以了解我对此的评论)。我猜sftp库也会这样做
Jython可以使用纯Python模块,这里介绍了如何指向(并包括)这些类型的模块。ExecuteScript处理器使用自己的Jython引擎来执行Python脚本。由于您要导入的库在NIFI inbuild Jython引擎中不可用,因此抛出错误 解决方案:
如果我们的机器上已经安装了python以及所有这些库(与安装NIFI的机器相同),那么您可以使用该python引擎来执行脚本。您可以使用ExecuteProcess处理器执行python代码 如果使用python真的很重要的话。您可以使用executestream命令。它将使用机器上安装的python引擎运行python代码 缺点是不能在python代码中访问flowfile的属性。只有它的内容 要访问内容
import sys
data = sys.stdin.readlines()
要将内容传递给下一个处理器,只需打印输出
print("THIS IS MY OUTPUT, IT WILL BE PASSED AS CONTENT TO THE NEXT PROCESSOR")
否则,如果您需要坚持使用ExecuteScript,请使用groovy,这将为您省去很多麻烦 如何设置“Module Directory”属性,以便ExecuteScript使用
pip
-已安装的模块?将其设置为Python安装下的站点软件包
目录
print("THIS IS MY OUTPUT, IT WILL BE PASSED AS CONTENT TO THE NEXT PROCESSOR")