python - NiFi : Unable to add external library to ExecuteScript Processor for Python

标签 python apache-nifi

我想在我的 NiFi jython ExecuteScript 处理器中为 Impala 使用 Python DB 客户端。

我已经使用 pip install impyla 安装了所需的模块,并在 ExecuteScript 处理器的模块目录字段中指定了它的路径。

之后我运行脚本并得到一个错误 javax.script.ScriptException: ImportError: No module named _bitarray

使用 pip show bitarray 我找到了这个模块位置并将其添加到模块目录字段(使用逗号作为分隔符)并重新启动 NiFi 以防万一。

但这并没有帮助。我也遇到了同样的错误。

经过一些研究,我发现 bitarray 实际上是一个 C 扩展。

_bitarray出现在bitarray/__init__.py的下一行:

from bitarray._bitarray import _bitarray, bitdiff, bits2bytes, _sysinfo

反过来,_bitarray 存储在 _bitarray.so 文件中,该文件位于我在模块目录中指定的同一目录中。

谁能帮我加载位数组模块?

完整的堆栈跟踪:

2017-07-12 15:00:57,627 ERROR [Timer-Driven Process Thread-5] o.a.nifi.processors.script.ExecuteScript org.apache.nifi.processor.exception.ProcessException: javax.script.ScriptException: ImportError: No module named _bitarray in at line number 1 at org.apache.nifi.processors.script.ExecuteScript.onTrigger(ExecuteScript.java:214) ~[nifi-scripting-processors-1.1.2.jar:1.1.2] at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1099) [nifi-framework-core-1.1.2.jar:1.1.2] at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:136) [nifi-framework-core-1.1.2.jar:1.1.2] at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) [nifi-framework-core-1.1.2.jar:1.1.2] at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:132) [nifi-framework-core-1.1.2.jar:1.1.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_131] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_131] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_131] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131] Caused by: javax.script.ScriptException: ImportError: No module named _bitarray in at line number 1 at org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:202) ~[jython-standalone-2.7.0.jar:na] at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:42) ~[jython-standalone-2.7.0.jar:na] at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:31) ~[jython-standalone-2.7.0.jar:na] at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) ~[na:1.8.0_131] at org.apache.nifi.processors.script.impl.JythonScriptEngineConfigurator.eval(JythonScriptEngineConfigurator.java:59) ~[nifi-scripting-processors-1.1.2.jar:1.1.2] at org.apache.nifi.processors.script.ExecuteScript.onTrigger(ExecuteScript.java:204) ~[nifi-scripting-processors-1.1.2.jar:1.1.2] ... 11 common frames omitted Caused by: org.python.core.PyException: null at org.python.core.Py.ImportError(Py.java:328) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_logic(imp.java:912) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_module_level(imp.java:978) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importName(imp.java:1062) ~[jython-standalone-2.7.0.jar:na] at org.python.core.ImportFunction.call(builtin.java:1280) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyObject.call(PyObject.java:431) ~[jython-standalone-2.7.0.jar:na] at org.python.core.builtin.import(builtin.java:1232) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importFromAs(imp.java:1156) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importFrom(imp.java:1132) ~[jython-standalone-2.7.0.jar:na] at bitarray$py.f$0(/usr/local/lib/python2.7/dist-packages/bitarray/init.py:131) ~[na:na] at bitarray$py.call_function(/usr/local/lib/python2.7/dist-packages/bitarray/init.py) ~[na:na] at org.python.core.PyTableCode.call(PyTableCode.java:167) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyCode.call(PyCode.java:18) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromCode(imp.java:436) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromPyClass(imp.java:236) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromPyClass(imp.java:205) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.loadFromSource(imp.java:651) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.find_module(imp.java:543) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_next(imp.java:840) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_module_level(imp.java:959) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importName(imp.java:1062) ~[jython-standalone-2.7.0.jar:na] at org.python.core.ImportFunction.call(builtin.java:1280) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyObject.call(PyObject.java:431) ~[jython-standalone-2.7.0.jar:na] at org.python.core.builtin.import(builtin.java:1232) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importFromAs(imp.java:1156) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importFrom(imp.java:1132) ~[jython-standalone-2.7.0.jar:na] at impala.hiveserver2$py.f$0(/usr/local/lib/python2.7/dist-packages/impala/hiveserver2.py:1211) ~[na:na] at impala.hiveserver2$py.call_function(/usr/local/lib/python2.7/dist-packages/impala/hiveserver2.py) ~[na:na] at org.python.core.PyTableCode.call(PyTableCode.java:167) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyCode.call(PyCode.java:18) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromCode(imp.java:436) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromPyClass(imp.java:236) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromPyClass(imp.java:205) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.loadFromSource(imp.java:651) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.find_module(imp.java:543) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyModule.impAttr(PyModule.java:106) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_next(imp.java:842) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_logic(imp.java:904) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_module_level(imp.java:978) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importName(imp.java:1062) ~[jython-standalone-2.7.0.jar:na] at org.python.core.ImportFunction.call(builtin.java:1280) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyObject.call(PyObject.java:431) ~[jython-standalone-2.7.0.jar:na] at org.python.core.builtin.import(builtin.java:1232) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importOneAs(imp.java:1099) ~[jython-standalone-2.7.0.jar:na] at impala.dbapi$py.f$0(/usr/local/lib/python2.7/dist-packages/impala/dbapi.py:193) ~[na:na] at impala.dbapi$py.call_function(/usr/local/lib/python2.7/dist-packages/impala/dbapi.py) ~[na:na] at org.python.core.PyTableCode.call(PyTableCode.java:167) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyCode.call(PyCode.java:18) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromCode(imp.java:436) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromPyClass(imp.java:236) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.createFromPyClass(imp.java:205) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.loadFromSource(imp.java:651) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.find_module(imp.java:543) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyModule.impAttr(PyModule.java:106) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_next(imp.java:842) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_logic(imp.java:904) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.import_module_level(imp.java:978) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importName(imp.java:1062) ~[jython-standalone-2.7.0.jar:na] at org.python.core.ImportFunction.call(builtin.java:1280) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyObject.call(PyObject.java:431) ~[jython-standalone-2.7.0.jar:na] at org.python.core.builtin.import(builtin.java:1232) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importFromAs(imp.java:1156) ~[jython-standalone-2.7.0.jar:na] at org.python.core.imp.importFrom(imp.java:1132) ~[jython-standalone-2.7.0.jar:na] at org.python.pycode._pyx1450.f$0(:5) ~[na:na] at org.python.pycode._pyx1450.call_function() ~[na:na] at org.python.core.PyTableCode.call(PyTableCode.java:167) ~[jython-standalone-2.7.0.jar:na] at org.python.core.PyCode.call(PyCode.java:18) ~[jython-standalone-2.7.0.jar:na] at org.python.core.Py.runCode(Py.java:1386) ~[jython-standalone-2.7.0.jar:na] at org.python.core.builtin.eval(builtin.java:497) ~[jython-standalone-2.7.0.jar:na] at org.python.core.builtin.eval(builtin.java:501) ~[jython-standalone-2.7.0.jar:na] at org.python.util.PythonInterpreter.eval(PythonInterpreter.java:259) ~[jython-standalone-2.7.0.jar:na] at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:40) ~[jython-standalone-2.7.0.jar:na]

最佳答案

Jython 无法加载 native (例如 CPython)模块,请参阅 this related SO answer了解更多详情。

关于python - NiFi : Unable to add external library to ExecuteScript Processor for Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45062309/

相关文章:

apache-nifi - 在 NiFi 中将列添加到管道分隔文件的末尾

python - 如何克隆Elasticsearch索引映射

python - 将分块文件读入数据帧

python - 将 functools.partial 与字符串方法一起使用的替代方法

hadoop - 在大数据平台上从 'Near Real Time'中的新闻Web API提取数据的最佳方法

elasticsearch - Apache Nifi使用_Parent将数据放入ElasticSearch

python - 如何使用漂亮的汤解析表内表?

python - 在 OpenCV 中是否可以将局部曲率绘制为表示对象 "pointiness"的热图?

apache-nifi - 尼菲 : Consume Azure Event Hub with an enterprise proxy environment

mysql - 如何使用nifi CaptureChangeMySQL?