【问题标题】:How to use NiFi ExecuteScript processor with Python?如何在 Python 中使用 NiFi ExecuteScript 处理器?
【发布时间】:2016-08-30 13:49:56
【问题描述】:

我在 Apache NiFi 中使用简单的 Python 脚本(保存为 .py 文件)对 ExecuteScript 处理器进行了非常基本的设置,如下所示。在处理器的属性中,我将脚本引擎设置为python,将脚本文件设置为该脚本的路径。

import time

count = 0

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

这是我制作的数据流图:

我没有看到任何输出到日志或 PutFile 的内容。但是,我确实看到打印语句出现在 \nifi-0.6.1\logs\nifi-bootstrap.log 中。我目前对此的了解有限。任何知道如何使用 ExecuteScript 处理器的人的回答,我将不胜感激,甚至可以给我一个比我当前设置更好的例子。

【问题讨论】:

标签: python etl apache-nifi


【解决方案1】:

鉴于您的脚本,我认为一切都按预期运行。该脚本没有生成任何 FlowFiles,这就是为什么没有任何东西从 ExecuteScript 移动到其他处理器,并且发送到系统的任何内容都被捕获在 bootstrap.log 中,这就是打印语句在那里结束的原因。

在 ExecuteScript 中执行的脚本可以访问一些标准对象:

  • 会话
  • 上下文
  • 日志
  • REL_FAILURE
  • REL_SUCCESS

为了生成流文件,您需要调用 session.create() 并获取生成的流文件并将其传输到 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

【讨论】:

  • 不确定您的意思是“获得访问”标准对象。这是否意味着在 .py 文件中不需要任何特殊的 import 语句来引用这些?
  • 这正是他的意思,它们是全局变量,因此您的脚本可以访问它们而无需在其他地方定义它们。
  • 我们不能使用 pandas 或任何其他库:(
猜你喜欢
  • 2020-03-01
  • 2018-01-11
  • 1970-01-01
  • 2019-10-12
  • 2020-03-10
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多