来自 1 table Apache NIFI 的 Gethbase 处理器
Gethbase processor from 1 table Apache NIFI
gethbase >> execute_script
您好,在使用 Jython 处理从 hbase 的数据到执行脚本时,我遇到了背压对象阈值问题。如果只执行一个处理器,我的队列总是满的,因为第一个处理器比第二个快。我正在使第二个处理器的并发任务从 1 到 3 或 4,但它会发出新的错误消息。这里:
Image
这里有人有解决办法吗?
这实际上可能会增加您的工作量,但我强烈建议为您的自定义实现编写 Groovy 而不是 Python/Jython/JRuby。
有几个原因!
- Groovy 是 "for the JVM" 和 leverages/integrates 构建的 Java 更干净
- Jython 是 Python 的 JVM 实现。 Python 和 JVM 之间发生了很多来回,这会大大增加开销。
如果您仍然喜欢使用 Jython,您仍然可以做一些事情!
使用 InvokeScriptedProcessor (ISP)
而不是 ExecuteScript
。 ISP 更快,因为它只加载一次脚本,然后调用它的方法,而不是每次都评估脚本的 ExecuteScript。
使用 ExecuteStreamCommand
和 command-line Python 代替。您将无法灵活地访问属性、处理器状态等。但是如果您只是转换内容,您应该会发现 Python 的 ExecuteStreamCommand 更快。
无论选择哪种语言,如果使用 session.get(int)
而不是 session.get()
,通常可以提高性能。这样,如果队列中有很多流文件,您可以调用 session.get(1000)
或其他方法,每次执行最多处理 1000 个流文件。如果您的脚本有很多开销,您可能会发现每次执行处理多个流文件可以显着提高性能。
gethbase >> execute_script
您好,在使用 Jython 处理从 hbase 的数据到执行脚本时,我遇到了背压对象阈值问题。如果只执行一个处理器,我的队列总是满的,因为第一个处理器比第二个快。我正在使第二个处理器的并发任务从 1 到 3 或 4,但它会发出新的错误消息。这里:
Image
这里有人有解决办法吗?
这实际上可能会增加您的工作量,但我强烈建议为您的自定义实现编写 Groovy 而不是 Python/Jython/JRuby。
有几个原因!
- Groovy 是 "for the JVM" 和 leverages/integrates 构建的 Java 更干净
- Jython 是 Python 的 JVM 实现。 Python 和 JVM 之间发生了很多来回,这会大大增加开销。
如果您仍然喜欢使用 Jython,您仍然可以做一些事情!
使用
InvokeScriptedProcessor (ISP)
而不是ExecuteScript
。 ISP 更快,因为它只加载一次脚本,然后调用它的方法,而不是每次都评估脚本的 ExecuteScript。使用
ExecuteStreamCommand
和 command-line Python 代替。您将无法灵活地访问属性、处理器状态等。但是如果您只是转换内容,您应该会发现 Python 的 ExecuteStreamCommand 更快。无论选择哪种语言,如果使用
session.get(int)
而不是session.get()
,通常可以提高性能。这样,如果队列中有很多流文件,您可以调用session.get(1000)
或其他方法,每次执行最多处理 1000 个流文件。如果您的脚本有很多开销,您可能会发现每次执行处理多个流文件可以显着提高性能。