windows(wsl)下的trino编译和升级注意事项

最近在进行旧版本的prestosql和prestodb升级相关的操作,尝试自己编译了一下,这里记录一下过程和遇到问题的处理。
因为Trino不支持windows下的编译,如果使用windows最方便的方式就是使用wsl了。

WSL中编译和调试

wsl的准备工作不累述了,升级到wsl2,使用的是ubuntu.
详见:
Windows Subsystem for Linux Installation Guide for Windows 10

工具安装

其他的过程包括安装java并设置一下JAVA_HOME(maven需要使用) ,maven和git之类。

sudo apt install openjdk-11-jdk #如果之前有其他发行版 update-alternatives --list java wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz sudo tar -xzvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven

idea同理,去官网下载然后移动到对应目录即可。
(本来想通过jetbrain-toolbox安装,但不知道为什么不能显示gui界面放弃了)

配置修改

修改一下/etc/profile

export JAVA_HOME=http://www.likecs.com/usr/lib/jvm/java-11-openjdk-amd64 export M2_HOME=http://www.likecs.com/opt/maven/apache-maven-3.6.3 export IDEA_HOME=http://www.likecs.com/opt/idea/idea-IU-203.7148.57 export PATH=$M2_HOME/bin:$IDEA_HOME/bin:$PATH xserver

为了方便xserver的配置,直接使用了mobaxterm,注意这里不用再去看网上的wsl的xserver设置,moba自己已经设置好了而且用的是和网上其他文档不同的port,自己设置了反而弹不出来。

在wsl中输入idea.sh即可弹出界面。
(这样简单设置无法使用外部的输入法,已经不支持外部剪切板(默认支持内部的复制到外部)

编译

默认的分支是最新版本的snapshot,需要切换到对应tag:

git fetch --all git checkout tags/352

可以将wsl的maven的本地仓库路径设置到外部的仓库,这样就可以复用已有的不需要完全下载新的。

编译的方式和运行就按照trino仓库即可(见trino),其中有一个文档是不需要编译的,且会比较耗时间,可以这么跳过:

mvn -pl '!docs' clean install -DskipTests 调试插件

启动命令在官网仓库中有,直接使用即可。

对于要调试的插件,将项目放入plugin目录中,默认是不会加载的,修改一下core/trino-server-main/etc/config.properties在plugin.bundles中加入自己项目的路径即可。(这里的加载插件很多,启动会比较慢可以适当减少一些)

升级遇到的问题

迁移的方法官网给了说明:Migrating from PrestoSQL to Trino
最主要的一点是在配置文件($TRINO_HOME/etc/config.properties)中增加
protocol.v1.alternate-header-name=Presto 。

UDF升级过程还可以,不得不说API的兼容性还是很好的,升级包之后API都是兼容的只是修改了一下路径。
需要注意的是之前一直需要的那个io.trino.spi.Plugin文件不需要了,当前打包会自动生成,有了他反而会编译失败。

主要遇到了两个问题:@OutputFunction注解的内容解析方式改变了,新版的Trino使用了SqlBase.g4中type的语法。
我们之前的形式array(row(start timestamp,end timestamp))会解析失败,在插件load的时候会挂掉(服务启动失败),因为end是一个保留字。

io.trino.sql.parser.ParsingException: line 1:35: mismatched input 'end'. Expecting: <identifier>, <type> at io.trino.sql.parser.ErrorHandler.syntaxError(ErrorHandler.java:108) at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41) at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:544) at org.antlr.v4.runtime.DefaultErrorStrategy.reportUnwantedToken(DefaultErrorStrategy.java:377) at org.antlr.v4.runtime.DefaultErrorStrategy.singleTokenDeletion(DefaultErrorStrategy.java:548) at org.antlr.v4.runtime.DefaultErrorStrategy.sync(DefaultErrorStrategy.java:266) at io.trino.sql.parser.SqlBaseParser.rowField(SqlBaseParser.java:11435) at io.trino.sql.parser.SqlBaseParser.type(SqlBaseParser.java:11103) at io.trino.sql.parser.SqlBaseParser.typeParameter(SqlBaseParser.java:11645) at io.trino.sql.parser.SqlBaseParser.type(SqlBaseParser.java:11329) at io.trino.sql.parser.SqlBaseParser.standaloneType(SqlBaseParser.java:404) at io.trino.sql.parser.SqlParser.invokeParser(SqlParser.java:139) at io.trino.sql.parser.SqlParser.createType(SqlParser.java:94) at io.trino.sql.analyzer.TypeSignatureTranslator.parseTypeSignature(TypeSignatureTranslator.java:98) at io.trino.operator.aggregation.AggregationImplementation$Parser.<init>(AggregationImplementation.java:315) at io.trino.operator.aggregation.AggregationImplementation$Parser.parseImplementation(AggregationImplementation.java:357) at io.trino.operator.aggregation.AggregationFromAnnotationsParser.parseFunctionDefinitions(AggregationFromAnnotationsParser.java:83) at io.trino.metadata.SqlAggregationFunction.createFunctionsByAnnotations(SqlAggregationFunction.java:45) at io.trino.metadata.FunctionExtractor.extractFunctions(FunctionExtractor.java:49) at io.trino.server.PluginManager.installPluginInternal(PluginManager.java:203) at io.trino.server.PluginManager.installPlugin(PluginManager.java:175) at io.trino.server.PluginManager.loadPlugin(PluginManager.java:169) at io.trino.server.PluginManager.loadPlugin(PluginManager.java:157) at io.trino.server.PluginManager.loadPlugins(PluginManager.java:143)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspfjs.html