Presto本地开发,plugin的设置

news2025/1/27 12:51:00

1. 新的问题

  • 之前搭建Presto的本地开发环境时,一直使用config.properties中的plugin.bundles配置项定义需要加载的plugin模块,详细可以参考博客《win10基于IDEA,搭建Presto开发环境》
  • presto服务启动时,指定加载哪些组件,有下面两种配置方法:
    • 线上服务部署,一般使用plugin.dir配置项,默认值:安装包下的plugin目录。会加载plugin目录下的所有插件,比较适合线上服务
    • 本地开发,一般使用plugin.bundles配置项,指定需要加载的plugin以实现服务的快速启动
  • 后来更换笔记本电脑,重新搭建本地开发环境时,发现使用plugin.bundles,竟然无法成功加载plugin
  • 具体报错信息如下,不是很完整:
    2022-07-15T22:54:50.333+0800	ERROR	main	com.facebook.presto.server.PrestoServer	Error loading pom: D:\IdeaProjects\facebook-presto-0.223.1\presto-main\..\presto-memory\pom.xml
    java.lang.RuntimeException: Error loading pom: D:\IdeaProjects\facebook-presto-0.223.1\presto-main\..\presto-memory\pom.xml
    	at io.airlift.resolver.ArtifactResolver.resolvePom(ArtifactResolver.java:143)
    	...
    	at com.facebook.presto.server.PrestoServer.main(PrestoServer.java:77)
    Caused by: org.apache.maven.project.ProjectBuildingException: 1 problem was encountered while building the effective model for com.facebook.presto:presto-memory:0.240
    [FATAL] Non-resolvable parent POM for com.facebook.presto:presto-root:0.240: Could not transfer artifact com.facebook.airlift:airbase:pom:99 from/to central (http://repo.maven.apache.org/maven2): Failed to transfer http://repo.maven.apache.org/maven2/com/facebook/airlift/airbase/99/airbase-99.pom. Error code 501, HTTPS Required and 'parent.relativePath' points at wrong local POM @ com.facebook.presto:presto-root:0.240, D:\IdeaProjects\facebook-presto-0.223.1\pom.xml, line 5, column 13
     for project com.facebook.presto:presto-memory:0.240 at D:\IdeaProjects\facebook-presto-0.223.1\presto-main\..\presto-memory\pom.xml
    	at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:149)
    	at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:102)
    	at io.airlift.resolver.ArtifactResolver.resolvePom(ArtifactResolver.java:136)
    	... 6 more
    Caused by: org.apache.maven.model.building.ModelBuildingException: 1 problem was encountered while building the effective model for com.facebook.presto:presto-memory:0.240
    [FATAL] Non-resolvable parent POM for com.facebook.presto:presto-root:0.240: Could not transfer artifact com.facebook.airlift:airbase:pom:99 from/to central (http://repo.maven.apache.org/maven2): Failed to transfer http://repo.maven.apache.org/maven2/com/facebook/airlift/airbase/99/airbase-99.pom. Error code 501, HTTPS Required and 'parent.relativePath' points at wrong local POM @ com.facebook.presto:presto-root:0.240, D:\IdeaProjects\facebook-presto-0.223.1\pom.xml, line 5, column 13
    	at org.apache.maven.model.building.DefaultModelProblemCollector.newModelBuildingException(DefaultModelProblemCollector.java:195)
    	at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:841)
    	at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:664)
    	at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:310)
    	at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:232)
    	at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:142)
    	... 8 more
    

分析错误日志,得到以下信息:

  • 无法正确加载指定plugin的pom.xml文件,Error loading pom ...
  • 无法加载pom文件的原因: 无法从默认的central仓库,加载presto-root的父模块com.facebook.airlift:airbase,也就是无法加载祖父模块
  • 无法访问central仓库的原因:central仓库使用的是其http地址,现在已经要求使用https方式了

2. 正确的解决办法

  • 在config.properties中,使用maven.repo.local指定本地maven仓库,

    maven.repo.local=/Users/xxx/repo
    
  • 本地仓库已经包含事先mvn clean install好的plugin jar,服务启动加载plugin时,便可以直接从本地仓库获取jar

    2023-03-07T17:21:44.074+0800	INFO	main	com.facebook.airlift.bootstrap.LifeCycleManager	Life cycle startup complete. System ready.
    2023-03-07T17:21:44.074+0800	INFO	main	com.facebook.presto.server.PluginManager	-- Loading plugin ../presto-memory/pom.xml --
    2023-03-07T17:21:55.707+0800	DEBUG	main	com.facebook.presto.server.PluginManager	Classpath for ../presto-memory/pom.xml:
    2023-03-07T17:21:55.728+0800	DEBUG	main	com.facebook.presto.server.PluginManager	    /Users/xxx/IdeaProjects/facebook-presto-0.223.1/presto-memory/target/classes
    2023-03-07T17:21:55.730+0800	DEBUG	main	com.facebook.presto.server.PluginManager	    /Users/xxx/repo/aopalliance/aopalliance/1.0/aopalliance-1.0.jar
    ...
    2023-03-07T17:21:55.760+0800	INFO	main	com.facebook.presto.server.PluginManager	Installing com.facebook.presto.plugin.memory.MemoryPlugin
    2023-03-07T17:21:55.771+0800	INFO	main	com.facebook.presto.server.PluginManager	Registering connector memory
    2023-03-07T17:21:55.773+0800	INFO	main	com.facebook.presto.server.PluginManager	-- Finished loading plugin ../presto-memory/pom.xml --
    

3. 不完美的解决办法

  • 为了避免大家走弯路,还是记录一下自己最开始的不完美的解决办法

  • 从网上查阅资料,发现该仓库确实已经从2020开始,改为使用https访问了

  • 全局搜索,只定位到maven-model-builder依赖中使用的pom-4.0.0.xml,配置的maven仓库地址符合要求

    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-model-builder</artifactId>
        <version>3.0.4</version>
    </dependency>
    

    在这里插入图片描述

  • 通过依赖分析,发现maven-model-builderpresto-main模块因为使用io.airlift.resolver:resolver:1.4,传递导入的
    在这里插入图片描述

  • 因此,就认为只要exclued掉presto-main中的maven-model-builder依赖就行

  • 结果仍然不行,最终只能使用plugin.dir配置plugin信息

    plugin.dir=../presto-server/target/presto-server-0.240/presto-server-0.240/plugin
    
  • 使用plugin.dir存在的问题: 开发过程中,模块重新编译后,需要将该模块的jar放到plugin中,否则最新的代码无法生效

4. 后记:关于Presto Plugin

  • Presto使用插件机制,符合SPI规范的Connector、Type、Function、System Access Control等可以加入到Presto中
  • 插件机制,使得组件功能可插拔、可定制化,可以满足用户的不同需求
  • 不同的插件,定义方式有所差别,但下面的一些事情是通用的:
    1. pom.xml中,packaging方式必须为presto-plugin
      <packaging>presto-plugin</packaging>
      
    2. pom.xml中,需要引入presto-spi模块。同时,必须实现SPI中定义的接口,或重写SPI中定义的方法
      <dependency>
          <groupId>com.facebook.presto</groupId>
          <artifactId>presto-spi</artifactId>
          <scope>provided</scope>
      </dependency>
      
    3. 配置presto-root的pom.xml,添加该插件对应的模块
      <module>presto-xxx-module</module>
      
    4. presto-server/src/main/assembly/presto.xml文件中,配置plugin的输出目录
      <fileSet>
          <directory>${project.build.directory}/dependency/presto-xxx-module-${project.version}</directory>
          <outputDirectory>plugin/xxx-module</outputDirectory>
      </fileSet>
      
    5. 配置presto-server的pom.xml文件,增加以下内容,以保证安装包对应的plugin目录有它的jar包
      <dependency>
          <groupId>com.facebook.presto</groupId>
          <artifactId>presto-xxx-module</artifactId>
          <version>${project.version}</version>
          <type>zip</type>
          <scope>provided</scope>
      </dependency>
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes--监控容器运行时:Falco

目录 Falco介绍 Falco架构 Falco的安装 告警规则示列 威胁场景测试&#xff1a; 监控容器创建的不可信任进程&#xff08;自定义规则&#xff09; Falco支持五种输出告警方式falco.yaml&#xff1a; Falco告警集中化展示&#xff1a; Falco介绍 Falco是一个Linux安全工具…

使用chatgpt来提高你的编程能力,简直如虎添翼

下面大家跟着我的问题&#xff0c;可以跟着我一起向 chatgpt老师学习&#xff0c;相信我的问题可能你也会感兴趣。在Java中&#xff0c;boolean类型的数组默认初始化为false。也就是说&#xff0c;如果你创建了一个boolean类型的数组&#xff0c;但是没有初始化它&#xff0c;那…

嵌入式 Linux进程间通信之信号量

目录 一、信号量 1、信号量概述 2、什么是信号量 3、信号量的分类 4、进程获取共享资源要执行的操作 5、System V IPC 机制&#xff1a;信号量 5.1 semget函数 5.2 semop函数 5.3 semctl函数 一、信号量 1、信号量概述 信号量集&#xff1a;由若干个信号组成的集合&a…

JUC并发编程之Semaphore-应用与深度源码剖析

目录 JUC并发编程之Semaphore-应用与深度源码剖析 1. Semaphore 是什么&#xff1f; 2.怎么使用Semaphore&#xff1f; 2.1构造方法 2.2 重要方法 2.3 基本使用 需求场景 基础版代码实现 tryAcquire()引入代码实现 acquireUninterruptibly(),acquire()对比代码实现 3.…

【C++】C++11——简介|列表初始|简化声明|nullptr与范围for|STL中的变化

文章目录一、C11简介二、列表初始化三、简化声明四、nullptr与范围for五、STL中一些变化一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于TC1主要是对C98标准中的漏洞进行修复…

Easyrecovery16免费的电脑硬盘恢复数据软件

在我们的日常生活和工作中&#xff0c;很容易发生一些意外情况&#xff0c;比如误删文件。这种情况下&#xff0c;您可能会感到非常困惑和担心&#xff0c;担心文件已经永久丢失&#xff0c;无法恢复。但是&#xff0c;在大多数情况下&#xff0c;即使您误删了文件&#xff0c;…

Nativefier把网页打包成exe

前要&#xff1a; 今天遇到一个需求&#xff0c;之前的应用都是用的h5挂载在企业微信的小应用&#xff0c;但是现在需要电脑运行的exe安装包&#xff01; 所以需要用到nativefier导报工具&#xff1a;nativefier是一个使用electron将网页转换为app的插件&#xff0c;写这篇博客…

二、SpringMVC注解式开发

1. RequestMapping注解 此注解就是来映射服务器访问的路径 可加在方法上,是为此方法注册一个可以访问的名称(路径) 可以加在类上,相当于是包名(虚拟路径),区分不同类中相同的action的名称 可区分get请求和post请求 package com.powernode.controller;import org.springframe…

liunx下安装node exporter

1 建立文件夹 cd /opt mkdir software 下载最新的包&#xff0c;并解压 https://prometheus.io/download/ 下载 curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz 3.解压 tar -xvf node_exporter-0.…

Gorm根据关系模型中的属性查询原模型数据

type ExamResult struct {gorm.ModelExamManagementID uintExamManagement ExamManagement json:"examManagement" // 一场考试&#xff0c;其中有试卷&#xff0c;有试题&#xff0c;有试题答案//MarkExamPaperRecord MarkExamPaperRecord //每一场考试对应的结…

测试经理:“你做了三年测试,连服务端的接口测试都不会?”

服务端的接口测试我们一般从功能开始进行测试&#xff0c;比如请求参数和响应参数的校验&#xff0c;业务逻辑或业务规则的校验&#xff0c;数据库操作的校验。 功能正常后会根据需要进行安全相关的检查、性能测试以及系列扩展测试&#xff0c;比如与历史版本的兼容性测试、接…

【微信小程序】-- WXS 脚本(二十九)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

【Java基础】Linux系统

CONTENT一、常用命令时间日期关机&重启登录&注销运行级别找回root用户密码&#xff08;CentOS 7&#xff09;二、文件管理显示当前工作路径显示文件和目录切换目录创建文件&目录删除文件&目录拷贝文件&目录移动文件&目录 / 重命名查找文件&目录查看…

java启动命令中-D和--的区别

目录一、java -D 添加参数二、java -- 添加参数在 SpringBoot 项目中&#xff0c;启动时&#xff0c;通过 -D 或 -- 添加参数&#xff0c;都可以直接覆盖 yml 或 properties 配置文件中的同名配置&#xff0c;如果不存在则相当于添加了一个配置。 一、java -D 添加参数 java -D…

【面试题】三道面试题让你掌握JavaScript中的执行上下文与作用域以及闭包

前言大厂面试题分享 面试题库前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库大家好&#xff0c;笔者呢最近再回顾JavaScript知识时&#xff0c;又看到了JavaScript的一些较为常见的内容&#xff0c;仔细看了之后发现…

1-1 微服务架构概述

文章目录微服务架构概述1-1. 系统进化理论概述集中式系统&#xff1a;分布式系统1-2. 系统进化理论背景1-3. 什么是微服务架构1-4. 微服务架构的优缺点1-5. 为什么选择 Spring Cloud 构建微服务认识 Spring Cloud2-1. Spring Cloud 是什么2-2. Spring Cloud 的版本2-3 Spring C…

2.2操作系统-进程管理:前趋图、前趋图与PV操作

2.1操作系统-进程管理&#xff1a;前趋图\前趋图与PV操作前趋图前趋图与PV操作练习前趋图与PV操作&#xff0c;一般出现了&#xff0c;分值在2~3分左右&#xff0c;技巧性很强。 前趋图 前趋图是为了描述一个程序的各部分间的依赖关系&#xff0c;或者是一个大的计算的各个子…

【c++类与对象 】

目录&#xff1a;前言一、基础引入1.类的定义2.类的权限3.类的封装4.类的实例化5.计算类对象的大小结构体内存对齐规则空类的大小二、this指针this引入this指针的特性经典例题三、类的六个默认成员函数1、构造 && 析构构造函数析构函数2、拷贝 && 赋值拷贝构造…

display:inline-flex使用

凡是使用了display:inline-flex布局的容器&#xff08;不管是行内元素还是块级元素&#xff09;&#xff0c;将会变为弹性容器&#xff0c;它的宽高都将可以被设置&#xff0c;并且该容器整体对外表现为一个行内块元素。 span也可以设置宽高&#xff0c;并且div和span它们都没有…

【C++】缺省参数函数重载

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、缺省参数1.1 缺省参数的概念1…