Gethbase处理器来自1表Apache NIFI

时间:2018-02-21 10:13:02

标签: apache-nifi

gethbase >> execute_script

您好,从hbase处理数据到使用Jython执行脚本时,我遇到了背压对象阈值的问题。如果只执行1个处理器,我的队列总是满的,因为第一个处理器比第二个处理器快。我正在将第二个处理器的并发任务从1到3或4进行,但它会产生新的错误消息。这里:

Image

这里有人有解决方案吗?

1 个答案:

答案 0 :(得分:3)

这实际上可能会增加你的工作,但我强烈建议你为自定义实现编写Groovy而不是Python / Jython / JRuby。

有几个原因!

  1. Groovy是为JVM"而建造的。并且更加干净地利用/集成Java
  2. Jython是JVM的Python实现。 Python和JVM之间会发生很多来回,这会大大增加开销。
  3. 如果您仍然喜欢使用Jython,那么您仍然可以做一些事情!

    • 使用ExecuteScript代替ExecuteStreamCommand。 ISP更快,因为它只加载脚本一次,然后调用它上面的方法,而不是每次都评估脚​​本的ExecuteScript。

    • 使用session.get(int)代替命令行Python。您不具备访问属性,处理器状态等的灵活性,但如果您只是转换内容,则应该更快地找到使用Python的ExecuteStreamCommand。

    • 无论您选择哪种语言,如果使用session.get()代替session.get(1000),通常都可以提高效果。这样,如果队列中有很多流文件,您可以调用active_apps_reported或其他东西,每次执行最多处理1000个流文件。如果您的脚本有很多开销,您可能会发现每次执行处理多个流文件可以显着提高性能。