Presto
plugin有两个组成部分:一些UDF
s(用于基本的MD5
/ SHA1
哈希)和一个EventListener
(用于使用FluentD
记录器记录查询)Presto
集群),我将它们添加到单个Plugin class下,捆绑一个JAR
并且没有遇到任何问题UDF
s必须在所有节点上注册,而(我的特定)EventListener
必须只在主节点注册现在我有两个选择
1.在单个JAR中将它们捆绑在一起
我们可以通过外部配置文件(主节点和从节点的不同配置)控制UDF
s / EventListener
s的注册。随着更多的UDF
s,EventListener
s和其他SPI
s被添加,单个JAR
与调整的配置文件配对,以实现期望的结果。
2.将它们捆绑为单独的JAR
我们可以为UDF
s / EventListener
创建不同的插件类,并通过META-INF.services/com.facebook.spi.Plugin
在Jenkins
文件中提供相应的类路径。然后我们将针对不同的组件使用不同的JAR
s:所有UDF
s的一个JAR,所有JAR
s的一个EventListener
等。但是,由于将来添加更多功能,我们可能最终会有许多不同的JAR
s。
我的问题是
我目前在Presto 0.194
,但很快将升级到Presto 0.206
无论哪种方式都有效。你可以做任何最容易的事情。中间实际上有第三个选项,即在单个JAR中有多个Plugin
实现(您将列出META-INF/services
文件中的所有实现)。
EventListener
实际上用于协调员和工人。查询事件发生在协调器上,拆分事件发生在工作者身上。但是,如果您只关心查询事件,则只需要在协调器上使用它。
您可以在协调器和工作器上部署事件插件,但只能在协调器上配置它。只有在通过添加event-listener.properties
文件并使用与event-listener.name
方法中返回的名称相匹配的EventListenerFactory.getName()
属性来配置代码时,才会使用该代码。