Apache nifi 从1表Apache NIFI获取HBase处理器

Apache nifi 从1表Apache NIFI获取HBase处理器,apache-nifi,Apache Nifi,您好,我在使用Jython处理从hbase到执行脚本的数据时遇到了背压对象阈值问题。如果只执行一个处理器,我的队列总是满的,因为第一个处理器比第二个处理器快。我正在执行第二个处理器从1到3或4的并发任务,但它会生成新的错误消息。在这里: 这里有人有解决方案吗?这实际上可能会增加您的工作量,但我强烈建议您为自定义实现编写Groovy,而不是Python/Jython/JRuby 有几个原因 Groovy是“为JVM”构建的,并且更干净地利用/集成了Java Jython是用于JVM的Python

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


这里有人有解决方案吗?

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

有几个原因

  • Groovy是“为JVM”构建的,并且更干净地利用/集成了Java
  • Jython是用于JVM的Python实现。Python和JVM之间有很多来回的操作,这会大大增加开销
  • 如果你仍然喜欢和Jython一起去,你仍然可以做一些事情

    • 使用
      InvokeScriptedProcessor(ISP)
      而不是
      ExecuteScript
      。ISP的速度更快,因为它只加载脚本一次,然后调用脚本上的方法,而不是每次对脚本求值的ExecuteScript

    • ExecuteStreamCommand
      与命令行Python一起使用。您将无法灵活地访问属性、处理器状态等。但是,如果您只是转换内容,您应该会发现使用Python的ExecuteStreamCommand更快

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

    gethbase >> execute_script