Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use NiFi ExecuteScript processor with Python?

I have a very basic setup of the ExecuteScript processor in Apache NiFi with a simple Python script (saved as a .py file) as shown here. In the Properties of the processor, I set the Script Engine to python and Script File to the path of this script.

import time

count = 0

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

And this is the dataflow diagram I made: nifi dataflow

I don't see anything outputted to the log or the PutFile. However, I do see the print statements appear in \nifi-0.6.1\logs\nifi-bootstrap.log. My knowledge of this is currently limited. I would appreciate answers from anyone who knows how to use the ExecuteScript processor, or even give me a better example than my current setup.

like image 775
Mushu909 Avatar asked May 04 '16 22:05

Mushu909


1 Answers

Given your script, I think everything is functioning as expected. The script is not producing any FlowFiles which is why nothing is moving from ExecuteScript to the other processors, and anything sent to system out is captured in the bootstrap.log so that is why the print statement ends up there.

Script executing with in ExecuteScript get access to a few standard objects:

  • session
  • context
  • log
  • REL_FAILURE
  • REL_SUCCESS

In order to produce FlowFiles you would need call session.create() and take the resulting FlowFile and transfer it to REL_SUCCESS.

The best source of info on the scripting processors is Matt Burgess's blog, this page has some good background (uses Groovy):

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

This one has a Jython example:

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

like image 62
Bryan Bende Avatar answered Sep 18 '22 20:09

Bryan Bende