Plugins Presto插件:单JAR与多JAR

Plugins Presto插件:单JAR与多JAR,plugins,presto,Plugins,Presto,My有两个组件:一些(用于基本的MD5/SHA1哈希)和一个(用于使用FluentD记录器记录查询) 在开发过程中(单节点Presto集群),我将它们添加到单个JAR下,并没有遇到任何问题 在部署过程中,我发现了一个陷阱:UDFs必须在所有节点上注册,而(我的特例)EventListener必须只在主节点上注册 现在我有两个选择 1。将它们捆绑在一个罐子中 我们可以通过外部配置文件控制UDFs/EventListeners的注册(主节点和从节点的不同配置)。随着越来越多的UDFs、Event

My有两个组件:一些(用于基本的
MD5
/
SHA1
哈希)和一个(用于使用
FluentD
记录器记录查询)

  • 在开发过程中(单节点
    Presto
    集群),我将它们添加到单个
    JAR
    下,并没有遇到任何问题

  • 在部署过程中,我发现了一个陷阱:
    UDF
    s必须在所有节点上注册,而(我的特例)
    EventListener
    必须只在主节点上注册


  • 现在我有两个选择

    1。将它们捆绑在一个罐子中

    我们可以通过外部配置文件控制
    UDF
    s/
    EventListener
    s的注册(主节点和从节点的不同配置)。随着越来越多的
    UDF
    s、
    EventListener
    s和其他
    SPI
    s被添加,一个
    JAR
    与经过调整的配置文件配对,以实现所需的结果

    2。将它们打包成单独的罐子

    我们可以为
    UDF
    s/
    EventListener
    创建不同的插件类,并通过
    Jenkins
    META-INF.services/com.facebook.spi.Plugin
    文件中提供相应的类路径。然后,我们将为不同的组件提供不同的
    JAR
    s:一个JAR用于所有
    UDF
    s,一个
    JAR
    用于所有
    EventListener
    s等等。然而,随着将来添加更多功能,我们可能最终会有很多不同的
    JAR
    s


    我的问题是

    • 这两种技术的优缺点是什么
    • 有没有其他办法


    我目前使用的是
    Presto 0.194
    ,但很快就会升级到
    Presto 0.206

    。你可以做对你来说最容易的事。实际上,中间有第三个选项,即在单个jar中有多个<代码>插件>代码>(您将列出<代码> Meta Anf/Service < /Cult>文件中的所有实现)。
    EventListener
    实际上用于协调器和工作程序。查询事件发生在协调器上,拆分事件发生在工作器上。但是,如果您只关心查询事件,那么您只需要在协调器上使用它

    您可以在coordinator和Worker上部署事件插件,但只能在coordinator上配置它。只有通过将
    event listener.properties
    文件与
    event listener.name
    属性(该属性与您在
    EventListenerFactory.getName()中返回的名称匹配)添加到