美文网首页
prestodb安装ranger插件

prestodb安装ranger插件

作者: JX907 | 来源:发表于2022-09-08 11:46 被阅读0次

    一、背景

    生产环境使用的prestodb为Facebook版本的prestodb,在安装ranger插件时发现源码中只支持prestosql版本,故考虑将ranger-presto-plugin的代码改为支持prestodb版本的,同时去掉对show schemas、show catalogs、 show tables的鉴权,因为在与上层查询系统对接时使用不到,只需要对select、insert、drop等操作的鉴权即可。

    二、ranger presto插件源码结构

    ranger中跟presto插件相关的模块为plugin-presto、ranger-presto-plugin-shim两个,其中shim为入口,类似hive的shim,起到适配的作用,在shim中不实现具体的业务逻辑,均为转调用plugin-presto模块中的类方法,两个模块中均有类:org.apache.ranger.authorization.presto.authorizer.RangerSystemAccessControl,该类实现了各种具体的鉴权逻辑。

    三、ranger插件被加载的过程

    ranger-presto-plugin-shim的org.apache.ranger.authorization.presto.authorizer.PrestoRangerPlugin实现了presto的com.facebook.presto.spi.Plugin接口(此处已经是换为prestodb下的类,修改前为prestosql中的类io.prestosql.spi.Plugin),同时在resouces/META-INF.services目录下有spi相关的文件io.prestosql.spi.Plugin,文件内容为Plugin的实现类org.apache.ranger.authorization.presto.authorizer.PrestoRangerPlugin;
    presto进程在启动时会使用java spi自动装载技术将Plugin接口的所有实现类都加载到进程中,具体代码在presto源码的PluginManger#loadPlugin方法中:


    image.png

    四、ranger插件代码修改内容

    1、两个模块的pom中中prestosql依赖,换为facebook的presto依赖,修改各类中引用的类为facebook的presto中的类,RangerSystemAcessControl实现的接口方法中有一些入参需要调整。
    2、shim包: resouces/META-INF.services目录下文件名修改为Facebook presto的包名:com.facebook.presto.spi.Plugin
    3、打包两个模块,并替换安装目录下对应的jar包
    mvn clean package -Dmaven.test.skip=true -pl plugin-presto -am -amd
    mvn clean package -Dmaven.test.skip=true -pl ranger-presto-plugin-shim -am -amd

    4、修改后的代码见github: zfqhd43/ranger-prestodb

    五、其他

    远程debug方式:
    1、在/opt/software/presto/bin/launcher.py中添加:command += ['-agentlib:jdwp=transport=dt_socket,address=5007,server=y,suspend=n'],位置如下:


    image.png

    2、在idea中新建remote jvm debug


    image.png

    相关文章

      网友评论

          本文标题:prestodb安装ranger插件

          本文链接:https://www.haomeiwen.com/subject/wmznnrtx.html