我的Presto
plugin有2个组成部分:一些UDF
s(用于基本MD5
/ SHA1
hashing )和一个{{3 }}(对于使用FluentD
记录器的记录查询)
在开发过程中(单节点 Presto
集群),我将它们添加到单个EventListener
下,捆绑了一个JAR
,但没有遇到问题
在部署期间,我发现了一个陷阱: UDF
必须在所有节点上注册,而(我特别是) {{ 1}}必须仅在主节点上注册
现在我有两个选择
1。将它们捆绑在一个JAR中
我们可以通过外部 config文件(主节点和从节点的不同配置)控制EventListener
/ UDF
的注册。当添加更多EventListener
,UDF
和其他EventListener
时,单个SPI
与经过调整的配置文件配对就可以达到预期的效果。
2。将它们捆绑为单独的JAR
我们可以为JAR
/ UDF
创建不同的 Plugin类,并通过{{在EventListener
文件中提供相应的 classpath 1}}。然后,对于不同的组件,我们将有不同的META-INF.services/com.facebook.spi.Plugin
:对于所有Jenkins
来说,一个JAR,对于所有JAR
来说,一个UDF
,等等。但是,随着将来增加更多功能,我们最终可能会拥有许多不同的JAR
。
我的问题是
我目前在EventListener
上,但很快就会升级到JAR
答案 0 :(得分:1)
这两种方法均有效。您可以做最适合自己的事情。实际上,中间还有第三个选择,那就是在一个JAR中拥有多个Plugin
实现(您将在META-INF/services
文件中列出所有实现)。
EventListener
实际上在协调器和工作人员上都使用。查询事件发生在协调器上,拆分事件发生在工作器上。但是,如果您只关心查询事件,则只需要在协调器上使用它即可。
您可以在协调程序和辅助程序上部署事件插件,但只能在协调程序上对其进行配置。仅当通过添加具有event-listener.properties
属性的event-listener.name
文件与您在EventListenerFactory.getName()
方法中返回的名称相匹配的文件来配置代码时,才会使用该代码。