Trino418框架适配达梦数据库方案

一、介绍

trino框架官网地址:Trino 418版本 https://trino.io/docs/current/installation/deployment.html
Trino 是一款旨在使用分布式查询高效查询大量数据的工具。如果您处理 TB 或 PB 的数据,您可能会使用与 Hadoop 和 HDFS 交互的工具。Trino 被设计为使用 MapReduce 作业管道(例如 Hive 或 Pig)查询 HDFS 的工具的替代工具,但 Trino 不仅限于访问 HDFS。Trino 可以并且已经扩展到对不同类型的数据源进行操作,包括传统关系数据库和 Cassandra 等其他数据源。
Trino 旨在处理数据仓储和分析:数据分析、聚合大量数据并生成报告。这些工作负载通常被归类为在线分析处理 (OLAP)。
因trino框架默认不支持达梦插件,进行适配后测试发现不同的trino版本都需要编译一下。做不到一次编译,处处使用。

名称 版本号 备注
Trino Trino418
DM8 1.2.192 理论来说对版本没有限制
操作系统centos7 该框架适配不支持window系统搭建
maven仓库 3.6.3+ 最低3.6.3的版本,不要抱侥幸心理,低版本有的包下不了
jdk版本 zulu17.42.21 trino官网要求
IDEA软件 不多赘述,自行安装

二、下载trino相关软件

1. 下载java17环境

使用官方推荐64位系统jdk17 Azul Zulu版的jdk https://www.azul.com/downloads/#zulu
Trino418框架适配达梦数据库方案_第1张图片
不选择这两个按钮,页面下拉选择匹配版本
Trino418框架适配达梦数据库方案_第2张图片
根据自己的系统选择合适版本,也可以使用压缩包的jdk文件
Trino418框架适配达梦数据库方案_第3张图片

2. 下载maven仓库

官网下载地址:https://archive.apache.org/dist/maven/maven-3/
Trino418框架适配达梦数据库方案_第4张图片
https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip
Trino418框架适配达梦数据库方案_第5张图片

3. 下载trino版本418

trino的github地址:https://github.com/trinodb/trino/tree/418

我这里用418版本,理论来说适配所有版本,没必要太纠结版本问题

418的下载版本地址:https://github.com/trinodb/trino/archive/refs/tags/418.zip

三、配置编译trino框架

官方部署教程:https://trino.io/docs/current/installation/deployment.html

1. 修改limits.conf文件

修改limits.conf文件的资源限制,并且必须是64位操作系统

vim /etc/security/limits.conf

trino soft nofile 131072
trino hard nofile 131072
trino soft nproc 128000
trino hard nproc 128000

Trino418框架适配达梦数据库方案_第6张图片

2. 配置jdk环境

## 1. 创建jdk目录
[root@localhost java]# mkdir /linux_soft
## 2. 将jdk版本文件放到该目录下
[root@localhost java]# ;ll /linux_soft
zulu17.42.21-ca-crac-jdk17.0.7-linux_x64.tar.gz
## 3. 修改配置文件
[root@localhost java]# vi /etc/profile
## ====================
export JAVA_HOME=/linux_soft/jdk17.0.7
export PATH=$PATH:$JAVA_HOME/bin
## ====================
[root@localhost java]# source /etc/profile   ## 使更改的配置立即生效
## 4. 将/lib64下的java换掉
[root@localhost java]# ln -s /linux_soft/jdk17.0.7/bin/java /usr/lib64/java
## 5. 查询版本
[root@localhost linux_soft]# /linux_soft/jdk17.0.7/bin/java -version
openjdk version "17.0.7" 2023-04-18 LTS
OpenJDK Runtime Environment Zulu17.42+21-CRaC-CA (build 17.0.7+7-LTS)
OpenJDK 64-Bit Server VM Zulu17.42+21-CRaC-CA (build 17.0.7+7-LTS, mixed mode, sharing)

3. 配置mavanr仓库

解压安装maven

## 1. 将maven文件放到该目录下
[root@localhost java]# ll /linux_soft
## 2. apache-maven-3.6.3-bin.zip放到该目录下
[root@localhost linux_soft]# ll apache-maven-3.6.3-bin.zip

[root@localhost java]# vi /etc/profile
## ====================
export MAVEN_HOME="/linux_soft/apache-maven-3.6.3"
export JAVA_HOME=/linux_soft/jdk17.0.7
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
## ====================
[root@localhost java]# source /etc/profile   ## 使更改的配置立即生效
## 3.查询mvn版本是否有误
[root@localhost linux_soft]# mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /linux_soft/apache-maven-3.6.3
Java version: 17.0.7, vendor: Azul Systems, Inc., runtime: /linux_soft/jdk17.0.7
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

修改settings.xml文件

## 创建repo的地址
[root@localhost java]# mkdir /linux_soft/apache-maven-3.6.3/repo
## 修改配置文件 看不懂的话看资料包中的settings.xml文件
[root@localhost java]# /linux_soft/apache-maven-3.6.3/conf/settings.xml

<localRepository>/linux_soft/apache-maven-3.6.3/repolocalRepository>

 
  <mirrors>
    
            <mirror>
            <id>alimavenid>
            <name>aliyun mavenname>
            <url>http://maven.aliyun.com/nexus/content/groups/public/url>
            <mirrorOf>centralmirrorOf>
        mirror>
  mirrors>

4. 编译trino框架

##新建目录,并将trino文件传到该目录下
[root@localhost trino_src]# mkdir /trino_src
[root@localhost trino_src]# cd /trino_src
[root@localhost trino_src]# ll trino-418.zip 
-rw-r--r--. 1 root root 65879229 628 19:35 trino-418.zip
## 解压
[root@localhost trino_src]# unzip trino-418.zip 
[root@localhost trino-418]# cd /trino_src/trino-418

##开始构建项目,这一步受到网络影响特别严重,当时测试构建项目花了4个小时
[root@localhost trino-418]# ./mvnw clean install -DskipTests

如果项目一直install 失败,可以在根pom.xml中指定个国内数据源试试,方法如下

Trino418框架适配达梦数据库方案_第7张图片

    <repositories>
        
        <repository>
            <id>aliyun1id>
            <url>https://maven.aliyun.com/repository/public/url>
        repository>
        <repository>
            <id>aliyun2id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/url>
        repository>
        <repository>
            <id>tencent1id>
            <url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/url>
        repository>
        <repository>
            <id>gw1id>
            <url>http://search.maven.orgurl>
        repository>
    repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>tencentid>
            <url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/url>
        pluginRepository>
    pluginRepositories>

四、运行调试trino框架

1. IDEA打开项目

项目install完了以后,直接使用idea打开项目即可
Trino418框架适配达梦数据库方案_第8张图片

2. 新建相关配置文件

运行项目前需要新建多个配置文件,**在整个项目中,启动类是testing->trino-server-dev目录下的DevelopmentServer类,需要读取的配置文件也就是etc目录,所以配置文件都是在trino-server-dev模块下。**目录结构是这样的
Trino418框架适配达梦数据库方案_第9张图片

etc
|-->node.properties
|-->jvm.config
|-->config.propoerties
|-->log.propoerties
|-->catalog
    |-->testmysql.properties
    |-->dameng.properties

Trino418框架适配达梦数据库方案_第10张图片

配置node.properties

[root@localhost etc]# cd /trino_src/trino-418/testing/trino-server-dev/etc
[root@localhost etc]# mkdir /trino_src/trino_data
[root@localhost etc]# vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/trino_src/trino_data

配置jvm.config

[root@localhost etc]# cd /trino_src/trino-418/testing/trino-server-dev/etc
[root@localhost etc]# vim jvm.config

-server
-Xmx4G
-XX:InitialRAMPercentage=80
-XX:MaxRAMPercentage=80
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=200000
-XX:+UnlockDiagnosticVMOptions
-XX:+UseAESCTRIntrinsics
# Disable Preventive GC for performance reasons (JDK-8293861)
-XX:-G1UsePreventiveGC

配置config.properties

[root@localhost etc]# cd /trino_src/trino-418/testing/trino-server-dev/etc
[root@localhost etc]# vim config.properties 

http-server.http.port=8080

discovery.uri=http://localhost:8080

exchange.http-client.max-connections=1000
exchange.http-client.max-connections-per-server=1000
exchange.http-client.connect-timeout=1m
exchange.http-client.idle-timeout=1m

scheduler.http-client.max-connections=1000
scheduler.http-client.max-connections-per-server=1000
scheduler.http-client.connect-timeout=1m
scheduler.http-client.idle-timeout=1m

query.client.timeout=5m
query.min-expire-age=30m

plugin.bundles=\
  ../../plugin/trino-resource-group-managers/pom.xml,\
  ../../plugin/trino-password-authenticators/pom.xml, \
  ../../plugin/trino-iceberg/pom.xml,\
  ../../plugin/trino-delta-lake/pom.xml,\
  ../../plugin/trino-blackhole/pom.xml,\
  ../../plugin/trino-cassandra/pom.xml,\
  ../../plugin/trino-memory/pom.xml,\
  ../../plugin/trino-jmx/pom.xml,\
  ../../plugin/trino-raptor-legacy/pom.xml,\
  ../../plugin/trino-hive-hadoop2/pom.xml,\
  ../../plugin/trino-hudi/pom.xml,\
  ../../plugin/trino-example-http/pom.xml,\
  ../../plugin/trino-kafka/pom.xml, \
  ../../plugin/trino-tpch/pom.xml, \
  ../../plugin/trino-local-file/pom.xml, \
  ../../plugin/trino-mysql/pom.xml,\
  ../../plugin/trino-mariadb/pom.xml,\
  ../../plugin/trino-singlestore/pom.xml,\
  ../../plugin/trino-sqlserver/pom.xml, \
  ../../plugin/trino-prometheus/pom.xml, \
  ../../plugin/trino-postgresql/pom.xml, \
  ../../plugin/trino-thrift/pom.xml, \
  ../../plugin/trino-tpcds/pom.xml, \
  ../../plugin/trino-google-sheets/pom.xml, \
  ../../plugin/trino-druid/pom.xml, \
  ../../plugin/trino-geospatial/pom.xml, \
  ../../plugin/trino-http-event-listener/pom.xml, \
  ../../plugin/trino-exchange-filesystem/pom.xml, \
  ../../plugin/trino-exchange-hdfs/pom.xml, \
  ../../plugin/trino-mysql-event-listener/pom.xml

node-scheduler.include-coordinator=true

配置log.properties

[root@localhost etc]# cd /trino_src/trino-418/testing/trino-server-dev/etc
[root@localhost etc]# vim config.properties
io.trino=INFO
# show classpath for plugins
io.trino.server.PluginManager=DEBUG
# Maven plugin loading code
com.ning.http.client=WARN

配置mysql数据源

#在etc目录下新建catalog目录 存放数据源
[root@localhost etc]# mkdir -p  /trino_src/trino-418/testing/trino-server-dev/etc/catalog
# 新建mysql数据源用于测试
[root@localhost catalog]# vim testmysql.properties
connector.name=mysql
connection-url=jdbc:mysql://XXX.XXX.103.235:3306
connection-user=root
connection-password=Gas123.

3. 修改DevelopmentServer类的配置

Trino418框架适配达梦数据库方案_第11张图片
新版本新点击修改选项 -> 添加VM选项 (注意:修改的是jvm参数 不是环境变量,不要填错了)
工作目录一定要填 M O D U L E D I R MODULE_DIR MODULEDIR

-ea -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -Xmx2G -Dconfig=etc/config.properties -Dlog.levels-file=etc/log.properties                                                                                            

Trino418框架适配达梦数据库方案_第12张图片
修改后,运行成功
Trino418框架适配达梦数据库方案_第13张图片
http://192.168.145.192:8080/ui/login.html
默认账号:admin,无密码
Trino418框架适配达梦数据库方案_第14张图片

4. 测试mysql连接并操作

测试连接的话,使用jar包进行测试,https://trino.io/docs/current/client/cli.html
Trino418框架适配达梦数据库方案_第15张图片

[root@localhost linux_soft]# /linux_soft/jdk17.0.7/bin/java -jar trino-cli-418-executable.jar --server 127.0.0.1:8080
## testmysql.test_decimal.test_decimal 这句解释一下
## 1. testmysql这个是新建catalog目录下新建mysql数据源testmysql.properties名称
## 2. 第一个test_decimal 这个是mysql数据库中的库
## 3. 第二个test_decimal 这个是mysql数据库中的表
trino> CREATE TABLE testmysql.test_decimal.test_decimal (delta decimal);
Query 20230726_070904_00001_fx5ti failed: line 1:1: Table 'testmysql.test_decimal.test_decimal' already exists
CREATE TABLE testmysql.test_decimal.test_decimal (delta decimal)

trino> drop table testmysql.test_decimal.test_decimal;
DROP TABLE
trino> CREATE TABLE testmysql.test_decimal.test_decimal (delta decimal);
CREATE TABLE
trino> 

Trino418框架适配达梦数据库方案_第16张图片

五、源码中整合达梦的驱动

1.添加导入trino-dameng模块

在IDEA的源码中直接将代码的插件包放到/trino_src/trino-418/plugin/目录下,然后导入trino-dameng模块
Trino418框架适配达梦数据库方案_第17张图片
Trino418框架适配达梦数据库方案_第18张图片

2.修改trino-dameng模块的pom.xml

换成你的trino框架中实际的版本,如果是422则换成422即可
Trino418框架适配达梦数据库方案_第19张图片

3.修改达梦驱动版本

pom中内置的8.1.2.192驱动,可按需调整
Trino418框架适配达梦数据库方案_第20张图片

4.修改根的pom.xml文件

  1. 添加trino-dameng的文件,这行一定要放到trino-clickhouse下面,不然后面编译回不通过

Trino418框架适配达梦数据库方案_第21张图片

  1. 在dependency中添加达梦的依赖,这部分一定要放到trino-collect下面

新增这部分内容
Trino418框架适配达梦数据库方案_第22张图片

  1. 屏蔽掉语法检查,不然多个空格少个空格都报错

新增这部分内容
Trino418框架适配达梦数据库方案_第23张图片

5.修改trino-server模块的trino.xml文件

新增这部分内容
Trino418框架适配达梦数据库方案_第24张图片

6.修改config.properties文件的插件部分

新增这部分,添加达梦的部分
Trino418框架适配达梦数据库方案_第25张图片

六、运行调试trino框架

1.重新编译框架

##跳过doc 以及 test
[root@localhost trino-418]# cd /trino_src/trino-418
[root@localhost trino-418]# ./mvnw -pl '!docs' clean install -DskipTests 

##mvn -pl '!docs' clean install -DskipTests=true -DfailIfNoTests=false

Trino418框架适配达梦数据库方案_第26张图片

2.添加配置文件

[root@localhost catalog]# pwd
/trino_src/trino-418/testing/trino-server-dev/etc/catalog
[root@localhost catalog]# cat dameng.properties 
connector.name=dameng
connection-url=jdbc:dm://XXX.XXX.177.169:5236
connection-user=SYSDBA
connection-password=SYSDBA

Trino418框架适配达梦数据库方案_第27张图片

3.测试dameng连接并操作

[root@localhost linux_soft]# /linux_soft/jdk17.0.7/bin/java -jar trino-cli-418-executable.jar --server 127.0.0.1:8080
trino> CREATE TABLE testmysql.test_decimal.test_decimal (delta decimal);
Query 20230726_070904_00001_fx5ti failed: line 1:1: Table 'testmysql.test_decimal.test_decimal' already exists
CREATE TABLE testmysql.test_decimal.test_decimal (delta decimal)

trino> drop table testmysql.test_decimal.test_decimal;
DROP TABLE
trino> CREATE TABLE testmysql.test_decimal.test_decimal (delta decimal);
CREATE TABLE
trino> drop table dameng.SYSDBA.test_decimal;
DROP TABLE
trino> CREATE TABLE dameng.SYSDBA.test_decimal (delta decimal);
CREATE TABLE
trino> 

Trino418框架适配达梦数据库方案_第28张图片

七、报错记录

1.Only HotSpot/OpenJDK VMs are supported

Trino418框架适配达梦数据库方案_第29张图片



[root@localhost java]# vi /etc/profile
## ====================
export MAVEN_HOME="/linux_soft/apache-maven-3.6.3"
export JAVA_HOME=/linux_soft/jdk17.0.7
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
## ====================
[root@localhost java]# source /etc/profile   ## 使更改的配置立即生效
[root@localhost java]# java -version         ## 查看JDK版本信息,如果显示出1.8.0证明成功

ln -s /linux_soft/jdk17.0.7/bin/java /usr/lib64/java

2.Invalid configuration property node.environment: may not be null (for class io.airlift.node.NodeConfig.environment)

https://trino.io/docs/current/installation/deployment.html


-ea -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -Xmx2G -Dconfig=etc/config.properties -Dlog.levels-file=etc/log.properties

etc
|-->node.properties
|-->jvm.config
|-->config.propoerties
|-->catalog
    |-->sqlserver.properties

新版本新点击修改选项 -> 添加VM选项 (注意:修改的是jvm参数 不是环境变量,不要填错了)
Trino418框架适配达梦数据库方案_第30张图片
运行成功
Trino418框架适配达梦数据库方案_第31张图片

3.应与之前的导入语句通过空行隔开

Trino418框架适配达梦数据库方案_第32张图片

4.connector的SPI版本不适配

Trino418框架适配达梦数据库方案_第33张图片

解决方案

将trino-dameng中的pom版本调整为实际使用的版本号
Trino418框架适配达梦数据库方案_第34张图片

资料包

链接:https://pan.baidu.com/s/13EFe8Of3AIhyWTH3GHzVBw?pwd=nema
提取码:nema

你可能感兴趣的:(达梦数据库,数据库)