如何使用NiFi ExecuteScript处理器与Python?

12

我在Apache NiFi中使用ExecuteScript处理器,采用一个简单的Python脚本(保存为.py文件)。在处理器的属性中,我将脚本引擎设置为python,并将脚本文件设置为此脚本的路径。

import time

count = 0

while(count < 20):
    print "The counter says: ", count
    count = count + 1
    time.sleep(.1)

这是我制作的数据流程图: nifi dataflow

我没有看到任何输出到日志或PutFile.然而,我确实看到print语句出现在\nifi-0.6.1\logs\nifi-bootstrap.log中。我的知识目前有限。希望有人能回答我如何使用ExecuteScript处理器,甚至给我一个比我当前设置更好的例子。


我想知道你是否尝试过ExecuteProcess。它应该抓取stdout并将其路由为flowfile:https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi.processors.standard.ExecuteProcess/index.html - andrew
1个回答

17

根据您的脚本,我认为一切都按预期运行。该脚本未生成任何FlowFiles,这就是为什么没有从ExecuteScript移动到其他处理器的原因,而任何发送到系统输出的内容都被捕获在bootstrap.log中,这就是为什么打印语句最终会出现在那里。

在ExecuteScript中执行脚本可以访问几个标准对象:

  • session
  • context
  • log
  • REL_FAILURE
  • REL_SUCCESS

为了生成FlowFiles,您需要调用session.create(),并将生成的FlowFile传输到REL_SUCCESS。

有关脚本处理器的最佳信息来源是Matt Burgess的博客,此页面提供了一些良好的背景(使用Groovy):

http://funnifi.blogspot.com/2016/02/executescript-processor-hello-world.html

这个示例包含了一个Jython示例:

http://funnifi.blogspot.com/2016/03/executescript-json-to-json-revisited_14.html


1
不确定您所说的“获取访问”标准对象是什么意思。这是否意味着在.py文件中引用它们时不需要任何特殊的import语句? - Michael M
2
这正是他的意思,它们是全局变量,因此您的脚本可以访问它们而无需在其他地方定义它们。 - Eden Trainor
我们不能使用pandas或任何其他库 :( - shzyincu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接