Presto本地开发,plugin的设置
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.xmlat 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 13for project com.facebook.presto:presto-memory:0.240 at D:\IdeaProjects\facebook-presto-0.223.1\presto-main\..\presto-memory\pom.xmlat 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 13at 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时,便可以直接从本地仓库获取jar2023-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-builder
是presto-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中
- 插件机制,使得组件功能可插拔、可定制化,可以满足用户的不同需求
- 不同的插件,定义方式有所差别,但下面的一些事情是通用的:
- pom.xml中,
packaging
方式必须为presto-plugin<packaging>presto-plugin</packaging>
- pom.xml中,需要引入presto-spi模块。同时,必须实现SPI中定义的接口,或重写SPI中定义的方法
<dependency><groupId>com.facebook.presto</groupId><artifactId>presto-spi</artifactId><scope>provided</scope> </dependency>
- 配置presto-root的pom.xml,添加该插件对应的模块
<module>presto-xxx-module</module>
- 在
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>
- 配置
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>
- pom.xml中,
相关文章:

Presto本地开发,plugin的设置
1. 新的问题 之前搭建Presto的本地开发环境时,一直使用config.properties中的plugin.bundles配置项定义需要加载的plugin模块,详细可以参考博客《win10基于IDEA,搭建Presto开发环境》presto服务启动时,指定加载哪些组件ÿ…...

2023年3月西安/杭州/深圳/东莞NPDP产品经理认证考试报名
产品经理国际资格认证NPDP是国际公认的唯一的新产品开发专业认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年…...

Vue3笔记01 创建项目,Composition API,新组件,其他
Vue3 创建Vue3项目 vue-cli //查看vue/cli版本,确保在4.5.0以上 vue --version //安装或升级vue/cli npm install -g vue/cli //创建项目 vue create new_project //启动 cd new_project npm run serve 也可以通过vue ui进入图形化界面进行创建 vite 新一代前端…...

pandas数据分析(二)
文章目录DataFrame数据处理与分析读取Excel文件中的数据筛选符合特定条件的数据查看数据特征和统计信息按不同标准对数据排序使用分组与聚合对员工业绩进行汇总DataFrame数据处理与分析 部分数据如下 这个数据百度可以搜到,就是下面这个 读取Excel文件中的数据 …...
Spring实现[拦截器+统一异常处理+统一数据返回]
Spring拦截器 1.实现一个普通拦截器 关键步骤 实现 HandlerInterceptor 接口重写 preHeadler 方法,在方法中编写自己的业务代码 Component public class LoginInterceptor implements HandlerInterceptor {/*** 此方法返回一个 boolean,如果为 true …...

MySQL——插入加锁/唯一索引插入死锁/批量插入效率
本篇主要介绍MySQL跟加锁相关的一些概念、MySQL执行插入Insert时的加锁过程、唯一索引下批量插入可能导致的死锁情况,以及分别从业务角度和MySQL配置角度介绍提升批量插入的效率的方法;MySQL跟加锁相关的一些概念在介绍MySQL执行插入的加锁过程之前&…...
【专项训练】数组、链表
数组array: list = []链表linked list # Definition for singly-linked list. class ListNode:def __init__(self, x):self.val = xself.next =...

基于Jeecgboot前后端分离的ERP系统开发代码生成(六)
商品信息原先生成的不符合要求,重新生成,包括一个附表商品价格信息表 一、采用TAB主题一对多的模式 因为主键,在online表单配置是灰的,所以不能进行外键管理,只能通过下面数据库进行关联录入,否则online界面…...

什么?同步代码块失效了?-- 自定义类加载器引起的问题
一、背景 最近编码过程中遇到了一个非常奇怪的问题,基于单例对象的同步代码块似乎失效了,百思不得其姐。 下面给出模拟过程和最终的结论。 二、场景描述和模拟 2.1 现象描述 Database实现单例,在 init 方法中使用同步代码块来保证 data不…...

CHAPTER 4 文件共享 - Samba
文件共享 - Samba1 Samba1.1 Samba的软件架构1.2 搭建Samba服务器1.3 samba用户管理1. 添加用户2. 修改用户密码3. 删除用户和密码4. 查看samba用户列表5. 查看samba服务器状态1.4 samba共享设置(配置文件详解)1.5 访问共享目录1. windows访问2. linux客…...

深入分析@Configuration源码
文章目录一、源码时序图1. 注册ConfigurationClassPostProcessor流程源码时序图2. 注册ConfigurationAnnotationConfig流程源码时序图3. 实例化流程源码时序图二、源码解析1. 注册ConfigurationClassPostProcessor流程源码解析(1)运行案例程序启动类Conf…...
Unity 代码优化 内存管理优化
项目遇到了卡顿的情况 仔细检查了代码没检查出有误的地方 仔细的总结了一下可以优化的东西 解决了卡顿 记录一下 1 协程 项目之前写的关于倒计时之类的东西 都是开了个协程 虽然协程是消耗很小的线程 , 可是还是有额外消耗 而且 有很多用携程来检测销毁预制体的操作 也都放到U…...

设计模式~门面(外观)模式(Facade)-08
目录 (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: (6)源码中的经典应用 代码 外观模式&am…...

C++面向对象编程之一:封装
C面向对象编程三大特性为:封装,继承,多态。C认为万事万物皆为对象,对象有属性和行为。比如:游戏里的地图场景可以看作是长方形对象,属性场景id,有长,有宽,可能有NPC&…...

IDEA插件系列(3):Maven Helper插件
一、引言在写Java代码的时候,我们可能会出现Jar包的冲突的问题,这时候就需要我们去解决依赖冲突了,而解决依赖冲突就需要先找到是那些依赖发生了冲突,当项目比较小的时候,还比较依靠IEDA的【Diagrams】查看依赖关系&am…...

SAP 更改物料基本计量单位
前言部分 在SAP中物料创建后,一旦发生业务,其基本计量单位便很难修改。由于单位无法满足业务要求,往往会要求新建一个物料替代旧物料。这时候除了要将旧物料上所有的未清业务删除外,还需要替换工艺与BOM中的旧物料。特别是当出现旧…...

蓝桥web基础知识学习
HTMLCSS 知识点重要指数HTML 基础标签🌟🌟🌟🌟🌟HTML5 新特性🌟🌟🌟🌟🌟HTML5 本地存储🌟🌟🌟🌟CSS 基础语法…...

Python+ChatGPT制作一个AI实用百宝箱
目录一、注册OpenAI二、搭建网站及其框架三、AI聊天机器人四、AI绘画机器人ChatGPT 最近在互联网掀起了一阵热潮,其高度智能化的功能能够给我们现实生活带来诸多的便利,可以帮助你写文章、写报告、写周报、做表格、做策划甚至还会写代码。只要与文字相关…...
Python中格式化字符串输出的4种方式
Python格式化字符串的4中方式 一、%号 二、str.format(args) 三、f-Strings 四、标准库模板 五、总结四种方式的应用场景’ 一、%号占位符 这是一种引入最早的一种,也是比较容易理解的一种方式.使用方式为: 1、格式化字符串中变化的部分使用占位符 2、…...
C#基础教程15 枚举与类
文章目录 C# 枚举(Enum)声明 enum 变量C# 类(Class)类的定义成员函数和封装C# 中的构造函数关键字 staticC# 枚举(Enum) 枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 声明 enum 变…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...