Presto 插件:单个 JAR 与多个 JAR
Presto Plugins: Single JAR vs Multiple JARs
我的Presto
plugin has 2 components: some UDF
s (for basic MD5
/ SHA1
hashing) and an EventListener
(对于使用FluentD
记录器的记录查询)
开发时(单节点Presto
集群),我把它们加在一个Plugin class下,捆绑了一个JAR
没有遇到任何问题
在部署期间我发现了一个陷阱:UDF
必须在所有节点上注册而(我的特殊情况)EventListener
必须仅在主节点
上注册
现在我有两个选择
1.将它们捆绑在一个 JAR
中
我们可以通过外部配置文件控制注册 UDF
秒/EventListener
秒(不同的配置对于主节点和从节点)。随着更多 UDF
、EventListener
和其他 SPI
的添加,单个 JAR
与经过调整的配置文件配对可实现预期结果。
2。将它们捆绑为单独的 JAR
我们可以为 UDF
s / EventListener
创建不同的 Plugin 类 并在 [=] 中提供相应的 classpaths 28=] 文件到 Jenkins
。然后,我们将针对不同的 组件 使用不同的 JAR
:一个 JAR 用于所有 UDF
,一个 JAR
用于所有 EventListener
s 等。但是,随着将来添加更多功能,我们最终可能会拥有许多不同的 JAR
s。
我的问题是
- 这两种技术的优缺点是什么?
- 是否有替代方法?
我目前使用 Presto 0.194
,但很快就会升级到 Presto 0.206
两种方法都行。你可以做对你来说最简单的事情。中间实际上还有第三个选项,即在单个 JAR 中有多个 Plugin
实现(您将在 META-INF/services
文件中列出所有实现)。
EventListener
实际上是用在coordinator和worker上。查询事件发生在协调器上,拆分事件发生在工作者上。但是,如果你只关心查询事件,你只需要在协调器上。
您可以在协调器和工作器上部署事件插件,但只能在协调器上配置。仅当您通过添加一个 event-listener.properties
文件来配置它时,才会使用该代码,其中 event-listener.name
属性 与您在 EventListenerFactory.getName()
方法中 return 的名称相匹配。
我的
Presto
plugin has 2 components: someUDF
s (for basicMD5
/SHA1
hashing) and anEventListener
(对于使用FluentD
记录器的记录查询)开发时(单节点
Presto
集群),我把它们加在一个Plugin class下,捆绑了一个JAR
没有遇到任何问题在部署期间我发现了一个陷阱:
UDF
必须在所有节点上注册而(我的特殊情况)EventListener
必须仅在主节点 上注册
现在我有两个选择
1.将它们捆绑在一个 JAR
中我们可以通过外部配置文件控制注册 UDF
秒/EventListener
秒(不同的配置对于主节点和从节点)。随着更多 UDF
、EventListener
和其他 SPI
的添加,单个 JAR
与经过调整的配置文件配对可实现预期结果。
2。将它们捆绑为单独的 JAR
我们可以为 UDF
s / EventListener
创建不同的 Plugin 类 并在 [=] 中提供相应的 classpaths 28=] 文件到 Jenkins
。然后,我们将针对不同的 组件 使用不同的 JAR
:一个 JAR 用于所有 UDF
,一个 JAR
用于所有 EventListener
s 等。但是,随着将来添加更多功能,我们最终可能会拥有许多不同的 JAR
s。
我的问题是
- 这两种技术的优缺点是什么?
- 是否有替代方法?
我目前使用 Presto 0.194
,但很快就会升级到 Presto 0.206
两种方法都行。你可以做对你来说最简单的事情。中间实际上还有第三个选项,即在单个 JAR 中有多个 Plugin
实现(您将在 META-INF/services
文件中列出所有实现)。
EventListener
实际上是用在coordinator和worker上。查询事件发生在协调器上,拆分事件发生在工作者上。但是,如果你只关心查询事件,你只需要在协调器上。
您可以在协调器和工作器上部署事件插件,但只能在协调器上配置。仅当您通过添加一个 event-listener.properties
文件来配置它时,才会使用该代码,其中 event-listener.name
属性 与您在 EventListenerFactory.getName()
方法中 return 的名称相匹配。