Presto插件:单个JAR与多个JAR

问题描述 投票:0回答:1
  • 我的Presto plugin有两个组成部分:一些UDFs(用于基本的MD5 / SHA1哈希)和一个EventListener(用于使用FluentD记录器记录查询)
  • 在开发过程中(单节点Presto集群),我将它们添加到单个Plugin class下,捆绑一个JAR并且没有遇到任何问题
  • 在部署期间,我发现了一个陷阱:UDFs必须在所有节点上注册,而(我的特定)EventListener必须只在主节点注册

现在我有两个选择

1.在单个JAR中将它们捆绑在一起

我们可以通过外部配置文件(主节点和从节点的不同配置)控制UDFs / EventListeners的注册。随着更多的UDFs,EventListeners和其他SPIs被添加,单个JAR与调整的配置文件配对,以实现期望的结果。

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

我们可以为UDFs / EventListener创建不同的插件类,并通过META-INF.services/com.facebook.spi.PluginJenkins文件中提供相应的类路径。然后我们将针对不同的组件使用不同的JARs:所有UDFs的一个JAR,所有JARs的一个EventListener等。但是,由于将来添加更多功能,我们可能最终会有许多不同的JARs。


我的问题是

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

我目前在Presto 0.194,但很快将升级到Presto 0.206

plugins presto
1个回答
1
投票

无论哪种方式都有效。你可以做任何最容易的事情。中间实际上有第三个选项,即在单个JAR中有多个Plugin实现(您将列出META-INF/services文件中的所有实现)。

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

您可以在协调器和工作器上部署事件插件,但只能在协调器上配置它。只有在通过添加event-listener.properties文件并使用与event-listener.name方法中返回的名称相匹配的EventListenerFactory.getName()属性来配置代码时,才会使用该代码。

© www.soinside.com 2019 - 2024. All rights reserved.