Presto插件:单个JAR与多个JAR

时间:2018-09-18 17:52:14

标签: plugins presto

  • 我的Presto plugin有2个组成部分:一些UDFs(用于基本MD5 / SHA1 hashing )和一个{{3 }}(对于使用FluentD记录器的记录查询)

  • 在开发过程中(单节点 Presto集群),我将它们添加到单个EventListener下,捆绑了一个JAR,但没有遇到问题

  • 部署期间,我发现了一个陷阱: UDF必须在所有节点上注册,而(我特别是) {{ 1}}必须仅在主节点上注册


现在我有两个选择

1。将它们捆绑在一个JAR中

我们可以通过外部 config文件(主节点和从节点的不同配置)控制EventListener / UDF注册。当添加更多EventListenerUDF和其他EventListener时,单个SPI与经过调整的配置文件配对就可以达到预期的效果。

2。将它们捆绑为单独的JAR

我们可以为JAR / UDF创建不同的 Plugin类,并通过{{在EventListener 文件中提供相应的 classpath 1}}。然后,对于不同的组件,我们将有不同的META-INF.services/com.facebook.spi.Plugin:对于所有Jenkins来说,一个JAR,对于所有JAR来说,一个UDF,等等。但是,随着将来增加更多功能,我们最终可能会拥有许多不同的JAR


我的问题是

  • 这两种技术的优缺点是什么?
  • 有替代方法吗?

我目前在EventListener上,但很快就会升级到JAR

1 个答案:

答案 0 :(得分:1)

这两种方法均有效。您可以做最适合自己的事情。实际上,中间还有第三个选择,那就是在一个JAR中拥有多个Plugin实现(您将在META-INF/services文件中列出所有实现)。

EventListener实际上在协调器和工作人员上都使用。查询事件发生在协调器上,拆分事件发生在工作器上。但是,如果您只关心查询事件,则只需要在协调器上使用它即可。

您可以在协调程序和辅助程序上部署事件插件,但只能在协调程序上对其进行配置。仅当通过添加具有event-listener.properties属性的event-listener.name文件与您在EventListenerFactory.getName()方法中返回的名称相匹配的文件来配置代码时,才会使用该代码。