# HuaweiCloud-Trino-plugins **Repository Path**: HuaweiCloudDeveloper/HuaweiCloud-Trino-plugins ## Basic Information - **Project Name**: HuaweiCloud-Trino-plugins - **Description**: 华为云软件对接trino插件 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-02-19 - **Last Updated**: 2025-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 使用文档 ## 1 项目背景 Trino是一款开源的高性能、分布式SQL查询引擎,专门用于对各种异构数据源运行交互式分析查询,支持从GB到PB的数据量范围。Trino专门为交互式分析而设计,可以对来自不同数据源的数据(包括:Hive、AWS S3、Alluxio、MySQL、Kafka、ES等等)进行合并查询,并提供良好的自定义连接器编程扩展框架。适用于期望响应时间从亚秒到数分钟不等的分析师场景。 本插件的开发,旨在实现OBS与Trino对接。
## 2 安装软件版本说明 1. jdk 17 2. Hadoop 3.3.5 3. hive 3.1.3 4. trino-433
## 3 准备工作 1. 进入华为云OBS控制台,创建一个桶,用于存放trino的数据。 https://console.huaweicloud.com/console/#/obs/manager/buckets
2. 进入obs存储,生成凭证和访问密钥。 https://console.huaweicloud.com/iam/#/mine/accessKey
3. 在服务器创建/opt/software 目录,在此目录下部署jdk、hadoop、hive、trino。
## 4 安装说明 ### 4.1 安装jdk 1. 在Oracle官网下载Jdk17。 下载地址: https://www.oracle.com/cn/java/technologies/downloads/#java17
2. 上传到服务器 /opt/software目录下,将其解压: ``` cd /opt/software # 解压gz压缩包 tar -zxvf jdk-17_linux-x64_bin.tar.gz ```
3. 配置环境变量 ``` # 编辑全局变量文件 vim /etc/profile ``` 在最后一行配置以下信息并保存: ``` # JAVA HOME export JAVA_HOME=/opt/software/jdk-17.0.10 export PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH ``` 4. 使配置文件生效 ``` source /etc/profile ``` 5. 检查配置是否生效,出现java版本信息,代表配置生效 ``` java -version ```
### 4.2 安装Mysql 安装Mysql,用于存储hive的元数据信息。 1. 在Oracle官网下载mysql安装包。 下载地址:https://downloads.mysql.com/archives/community/ 2. 参考相关资料安装,建议下载5.7或8.0版本。
### 4.3 安装hadoop hadoop 使用 3.3.5版本,作为基础环境供hive使用。解压即可,后续无需启动。 1. 在apache网站下载hadoop安装包,下载地址:https://dlcdn.apache.org/hadoop/common/ ,下载3.3.5版本。 2. 上传到服务器 /opt/software 目录下,将其解压即可,无需配置环境变量: ``` cd /opt/software tar -zxvf hadoop-3.3.5.tar.gz ```
### 4.4 安装hive #### 4.4.1 安装hive-3.1.3 1. 在apache网站下载hive安装包,下载地址:https://downloads.apache.org/hive/ 下载对应版本的文件:apache-hive-3.1.3-bin.tar.gz 2. 上传到服务器 /opt/software 目录下,将其解压并重命名。 ``` cd /opt/software tar -zxvf apache-hive-3.1.3-bin.tar.gz mv apache-hive-3.1.3-bin hive-3.1.3 ``` 3. 配置环境变量 ``` # 编辑全局变量文件 vim /etc/profile ``` 在最后一行配置以下信息并保存: ``` #HIVE_HOME export HIVE_HOME=/opt/software/hive-3.1.3 export PATH=$PATH:$HIVE_HOME/bin ``` 4. 使配置文件生效 ``` source /etc/profile ``` #### 4.4.2 配置hive 1. 将MySQL的JDBC驱动拷贝到Hive的lib目录下: ``` cp /opt/software/ mysql-connector-java-5.1.48.jar $HIVE_HOME/lib ``` 2. 在github中下载huawei hadoop的jar包 下载地址: https://github.com/huaweicloud/obsa-hdfs/blob/master/release/hadoop-huaweicloud-3.1.1-hw-53.8.jar 将jar包拷贝到Hive的lib目录下: ``` cp /opt/software/hadoop-huaweicloud-3.1.1-hw-53.8.jar $HIVE_HOME/lib ``` 3. 配置hadoop路径 (1)根据hive-env.sh.template文件创建 hive-env.sh文件: ``` cd $HIVE_HOME/conf cp hive-env.sh.template hive-env.sh ``` (2)修改hive-env.sh文件,最后一行加上hadoop的路径: ``` vim hive-env.sh # 设置hadoop路径 export HADOOP_HOME=/opt/software/hadoop-3.3.5 ``` >备注:不配置这一行,hive metastore无法启动。 1. 配置MySql数据库信息和obs访问信息 (1)新建hive-site.xml文件: ``` cd $HIVE_HOME/conf vim hive-site.xml ``` (2)配置mysql数据库信息和obs信息,将一下信息复制到hive-site.xml中: ``` javax.jdo.option.ConnectionURL jdbc:mysql://127.0.0.1:3306/metastore?useSSL=false javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName mysql用户名 javax.jdo.option.ConnectionPassword mysql密码 hive.metastore.warehouse.dir /opt/software/hive-3.1.3/warehouse fs.obs.impl org.apache.hadoop.fs.obs.OBSFileSystem fs.AbstractFileSystem.obs.impl org.apache.hadoop.fs.obs.OBS fs.obs.access.key 华为云OBS AK fs.obs.secret.key 华为云OBS SK fs.obs.endpoint OBS桶所在区域对应的Endpoint ``` 备注:区域对应的Endpoint可以在华为云官网:https://developer.huaweicloud.com/endpoint?OBS 中查询。 5. 初始化元数据库 (1)登录mysql,创建metastore数据库: ``` mysql -uroot -p密码 create database metastore; ``` (2)初始化元数据库 ``` cd /opt/software/hive-3.1.3 bin/schematool -dbType mysql -initSchema ```
#### 4.4.3 启动hive ``` hive --service metastore ```
### 4.5 安装trino #### 4.5.1 安装与基本配置 1. 下载trino 下载地址:https://repo1.maven.org/maven2/io/trino/trino-server/433/ 下载对应版本安装文件:trino-server-433.tar.gz > 备注:必须是这个版本,其他版本可能需要修改hive-obs代码重新编译,编辑具体见8.编译说明
1. 将trino-server-433.tar.gz上传到服务器/opt/software目录下,将其解压: ``` cd /opt/software # 解压gz压缩包 tar -zxvf trino-server-433.tar.gz ``` 1. 配置trino文件 (1)配置etc/node.properties文件 ``` cd /opt/software/trino-server-433/etc vim node.properties ``` 添加内容如下: ``` node.environment=production node.id=ffffffff-ffff-ffff-ffff-ffffffffffff node.data-dir=/opt/software/trino-server-433/data ``` (2)配置etc/jvm.config文件 ``` 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=2000000 -Dfile.encoding=UTF-8 # Reduce starvation of threads by GClocker, recommend to set about the number of cpu cores (JDK-8192647) -XX:+UnlockDiagnosticVMOptions -XX:GCLockerRetryAllocationCount=32 ``` (3)配置etc/config.properties文件 ``` vim config.properties ``` 添加内容如下: ``` #指定当前节点是否是coordinator节点,true是coordinator节点,false是worker节点 coordinator=true #是否将当前coordinator节点当做worker,如果节点既是coordinator又是worker节点会影响当前节点性能 node-scheduler.include-coordinator=true #Presto服务器的端口 http-server.http.port=7670 #查询使用集群中最大的内存量 query.max-memory=2GB #连接Discovery使用的URI,由于是内嵌,与coordinator的节点端口一致 discovery.uri=http://127.0.0.1:7670 ``` (4)配置日志文件etc/log.properties文件 ``` vim log.properties ``` 添加内容如下(方便调试,设置为DEBUG,可按需修改日志级别): ``` io.trino=DEBUG io.trino.filesystem=DEBUG io.trino.hdfs=DEBUG com.obs.services=DEBUG io.trino.sql=INFO org.apache.hadoop.fs.obs=DEBUG ```
#### 4.5.2 hive与obs对接配置 trino通过hive对接obs支持2种配置方式,native-obs模式和hadoop模式。分别进行配置说明。两种模式选择一种配置到hiveobs.properties文件即可。 ##### 4.5.2.1 native-obs模式配置 (1)在/opt/software/trino-server-433/etc文件夹中新建catalog文件夹,并新建hiveobs.properties文件。 ``` cd /opt/software/trino-server-433/etc mkdir catalog cd catalog vim hiveobs.properties ``` (2)hiveobs.properties文件添加如下内容: ``` ########### 配置 connector ############# connector.name=hive_obs hive.metastore.uri=thrift://127.0.0.1:9083 # 是否授予删表的权限 hive.allow-drop-table=true # 是否开启向Hive的外部表写入数据 hive.non-managed-table-writes-enabled=true # 启用native-obs fs.native-obs.enabled=true # 禁用hadoop模式 fs.hadoop.enabled=false ############ Metastore配置属性############################### hive.metastore.thrift.client.read-timeout=10s #缓存的Metastore数据应被视为有效的持续时间。单位:秒 hive.metastore-cache-ttl=0s # HiveMetastore缓存最大大小。 hive.metastore-cache-maximum-size=10000 # 访问后异步刷新缓存的Metastore数据,如果它比这更旧但尚未过期,则允许后续访问查看新数据。单位:秒 hive.metastore-refresh-interval=1s #用于刷新缓存的元存储数据的最大线程数。 hive.metastore-refresh-max-threads=100 ############### Metastore配置属性################################## ###### native-obs配置 ####### obs.access-key=华为云OBS AK obs.secret-key=华为云OBS SK # 华为云obs endpoint,本例写的是华北-北京四区域节点,实际请修改为桶所在区域节点 obs.endpoint=https://obs.cn-north-4.myhuaweicloud.com # 临时AK/SK对应的securityToken obs.security-token= obs.path-style-access=false obs.sse.type=NONE #obs.sse.kms-key-id= #obs.sse.c-key-base64= obs.requester-pays=false obs.streaming.part-size=16MB obs.max-connections=500 ```
##### 4.5.2.2 hadoop模式配置 hiveobs.properties文件添加如下内容: ``` ########### 配置 connector ############# connector.name=hive_obs hive.metastore.uri=thrift://127.0.0.1:9083 # 是否授予删表的权限 hive.allow-drop-table=true # 是否开启向Hive的外部表写入数据 hive.non-managed-table-writes-enabled=true ############ 配置 connector ############ fs.native-obs.enabled=false fs.hadoop.enabled=true ############ Metastore配置属性 ############################### hive.metastore.thrift.client.read-timeout=10s #缓存的Metastore数据应被视为有效的持续时间。单位:秒 hive.metastore-cache-ttl=0s # HiveMetastore缓存最大大小。 hive.metastore-cache-maximum-size=10000 # 访问后异步刷新缓存的Metastore数据,如果它比这更旧但尚未过期,则允许后续访问查看新数据。单位:秒 hive.metastore-refresh-interval=1s #用于刷新缓存的元存储数据的最大线程数。 hive.metastore-refresh-max-threads=100 ############### Metastore配置属性 ################################## ################# OBS配置 ################################## #要使用的默认OBS访问密钥。 hive.obs.access-key=华为云OBS AK #要使用的默认OBS密钥。 hive.obs.secret-key=华为云OBS SK ## 华为云obs endpoint,本例写的是华北-北京四区域节点,实际请修改为桶所在区域节点 hive.obs.endpoint=https://obs.cn-north-4.myhuaweicloud.com #临时AK/SK对应的securityToken hive.obs.security-token= #写入数据时使用的OBS存储类。目前仅支持STANDARD和INTELLIGENT_TIERING存储类。默认存储类别是STANDARD hive.obs.storage-class=STANDARD #判断是否使用路径访问方式访问OBS服务,true使用路径访问方式,false使用虚拟主机访问方式,默认值:false hive.obs.path-style-access=false # 使用HTTPS与OBS API通信(默认为true)。 hive.obs.ssl.enabled=true # 使用OBS服务器端加密(默认为false)。 hive.obs.sse.enabled=false # OBS服务器端加密的密钥管理类型,KMS/C #hive.obs.sse.type=KMS #hive.obs.sse.type=C # 用于使用KMS管理的密钥进行OBS服务器端加密的KMS密钥ID。如果未设置,则使用默认密钥。 hive.obs.sse.kms-key-id= hive.obs.sse.c-key-base64= # 将文件上传到OBS时使用的预制ACL(默认为Private)。 #hive.obs.upload-acl-type=private # 忽略Glacier对象而不是使查询失败。这将跳过可能是表或分区的一部分的数据。默认为false. #hive.obs.skip-glacier-objects=false ################# OBS配置 ################################## ################# OBS调整属性 ################################## # 与OBS通信时遇到错误时尝试重新操作(如读取、写入等)的最大次数;默认5次。 hive.obs.max-error-retries=5 #重试的最大读取尝试次数。 hive.obs.max-client-retries=5 #与OBS通信时,连续的重试之间允许的最大等待时间 hive.obs.max-backoff-time=10m #重试与OBS通信的最长时间 hive.obs.max-retry-time=10m #TCP连接超时 hive.obs.connect-timeout=5s #TCP套接字读取超时 hive.obs.socket-timeout=5s #与OBS的最大连接数 hive.obs.max-connections=500 # 是否由请求者支付 hive.obs.requester-pays.enabled=false hive.obs-file-system-type=TRINO ################# OBS调整属性 ################################## ```
#### 4.5.3 OBS Java SDK安装 1. 参考华为官网下载 OBS Java SDK 下载说明地址:https://support.huaweicloud.com/intl/zh-cn/sdk-java-devg-obs/obs_21_0001.html 本例下载jar为:esdk-obs-java-3.23.9.1.jar,下载后存放到/opt/software目录。 2. 创建plugin目录 (1)参考hive目录,创建hive-obs ``` cd /opt/software/trino-server-433/plugin # 复制hive目录为 hive-obs目录 cp -r hive/ hive-obs ``` (2)删除hive-obs中的trino-hive-hadoop2-433.jar 、trino-hive-hadoop2-433-services.jar ``` cd /opt/software/trino-server-433/plugin/hive-obs rm -rf trino-hive-hadoop2-433.jar trino-hive-hadoop2-433-services.jar ``` (3)将esdk-obs-java-3.23.9.1.jar复制到hive-obs目录中。 ``` cp /opt/software/esdk-obs-java-3.23.9.1.jar /opt/software/trino-server-433/plugin/hive-obs ``` (4)将trino-obs-433.jar 复制到hive-obs目录中。 ``` cp /opt/software/trino-obs-433.jar /opt/software/trino-server-433/plugin/hive-obs ```
## 5 启动trino 启动trino前需启动hive metastore。 1. 启动trino ``` cd /opt/software/trino-server-433/bin ./launcher start ``` 2. 可查看启动日志 ``` cd /opt/software/trino-server-433/data/var/log tail -f server.log ``` 日志中看到:SERVER STARTED,即表示trino启动成功。
## 6 测试trino 1. 下载trino-cli-433-executable.jar,方便后续测试。 下载地址:https://repo1.maven.org/maven2/io/trino/trino-cli/433/
2. 将文件重命名为trino-cli.jar,并授予执行权限 ``` mv trino-cli-433-executable.jar trino-cli.jar chmod +x trino-cli.jar ```
3. 启动客户端 ``` ./trino-cli.jar --server 127.0.0.1:7670 --catalog hiveobs --schema default ``` 连接上trino。
## 7 配置项说明 ### 7.1 native-obs模式配置项
配置项 说明
obs.access-key 默认使用的OBS访问密钥
obs.secret-key 默认使用的OBS密钥
obs.endpoint OBS存储节点区域
obs.security-token 临时AK/SK对应的securityToken
obs.path-style-access 判断是否使用路径访问方式访问OBS服务,true使用路径访问方式,false使用虚拟主机访问方式,默认值:false
obs.sse.type 服务端加密方式,KMS/C/NONE
obs.sse.kms-key-id 服务器端加密时,采取SSE-KMS加密时,用于使用KMS管理的密钥进行OBS服务器端加密的KMS密钥ID。如果未设置,则使用默认密钥。
obs.sse.c-key-base64 服务器端加密时,采取SSE-C加密,客户端提供的加密密钥的Base64编码。
obs.streaming.part-size 设置流式传输的分段大小。默认16MB。最小5MB,最大256MB。
obs.requester-pays 是否允许启用请求者付费。默认为false。
obs.max-connections 与OBS的最大连接数
obs.http-proxy 用于连接到OBS的HTTP代理服务器的URL。
obs.http-proxy.secure 设置为true可为代理服务器启用HTTPS。

### 7.2 hadoop模式配置项
配置项 说明 备注
hive.obs.access-key 默认使用的OBS访问密钥
hive.obs.secret-key 默认使用的OBS密钥
hive.obs.endpoint OBS存储节点区域
hive.obs.security-token 临时AK/SK对应的securityToken
hive.obs.storage-class 写入数据时使用的OBS存储类。目前仅支持STANDARD和WARM存储类。默认存储类别是STANDARD 存储类别说明详见:https://support.huaweicloud.com/intl/zh-cn/ugobs-obs/obs_41_0006.html
hive.obs.path-style-access 设置是否使用路径访问方式访问OBS服务,true使用路径访问方式,false使用虚拟主机访问方式,默认值:false 注意:如果设置了路径方式,无法使用OBS 3.0版本桶的新特性
hive.obs.ssl.enabled 使用HTTPS与OBS API通信(默认为true)
hive.obs.sse.enabled 服务端加密(默认为false)
hive.obs.sse.type 服务端加密方式,可选:KMS或C 加密方式说明详见:https://support.huaweicloud.com/intl/zh-cn/api-obs/obs_04_0105.html
hive.obs.sse.kms-key-id 服务器端加密时,采取SSE-KMS加密时,用于使用KMS管理的密钥进行OBS服务器端加密的KMS密钥ID。如果未设置,则使用默认密钥。
hive.obs.sse.c-key-base64 服务器端加密时,采取SSE-C加密,客户端提供的加密密钥的Base64编码。
hive.obs.max-client-retries 最大读重试次数
hive.obs.max-error-retries 与OBS通信时遇到错误时尝试重新操作(如读取、写入等)的最大次数;默认5次。
hive.obs.max-backoff-time 连续的重试之间允许的最大等待时间;默认10m(10分钟)。 可以用 ns\us\ms\s\m\h\d 单位。
hive.obs.max-retry-time 重试与OBS通信的最长时间,默认10分钟。 可以用 ns\us\ms\s\m\h\d 结尾。
hive.obs.connect-timeout TCP连接超时时间,默认5秒。 可以用 ns\us\ms\s\m\h\d 结尾。
hive.obs.socket-timeout TCP套接字读取超时时间,默认5秒。 可以用 ns\us\ms\s\m\h\d 结尾。
hive.obs.max-connections 与OBS的最大连接数,默认500.
hive.obs.staging-directory 上传前暂存文件的临时目录,默认使用java.io.tmpdir目录。
hive.obs.upload-acl-type 上传文件到OBS时可以使用的ACL,默认private 访问控制列表说明详见: https://support.huaweicloud.com/intl/zh-cn/perms-cfg-obs/obs_40_0005.html
hive.obs.skip-glacier-objects 忽略Glacier对象,包含COLD、DEEP_ARCHIVE2类存储类别。默认为false。 https://support.huaweicloud.com/intl/zh-cn/ugobs-obs/obs_41_0006.html
hive.obs.requester-pays.enabled 是否允许启用请求者付费。默认为false。
hive.obs.streaming.enabled 是否启用流式传输模式。默认为true。
hive.obs.streaming.part-size 设置流式传输的分段大小。默认16M。
hive.obs.proxy.host 设置代理服务器地址
hive.obs.proxy.host 设置代理服务器端口
hive.obs.proxy.username 设置代理用户名
hive.obs.proxy.password 设置代理密码

## 8 编译说明 1. trino支持在Mac OX 或者Linux上进行编译。 2. 编译要求:Java 17.0.4+, 64-bit;如未安装jdk17,需先行安装。 3. trino本身的编译可参考: https://github.com/trinodb/trino/tree/433 中的README文档。
### 8.1 具体编译方式 1. 下载代码,代码下载地址: https://github.com/trinodb/trino/tags trino-obs插件基于trino-433版本进行开发,可下载433版本下载,对应下载地址为: https://github.com/trinodb/trino/archive/refs/tags/433.tar.gz 2. 解压代码 ``` tar -zxvf trino-443.tar.gz ``` 3. 为trino增加trino-obs插件 (1) 将trino-obs代码工程复制到trino的plugin目录下: ``` cp trino-obs trino/plugin ``` (2) 修改trino的pom.xml 修改pom.xml文件,在modules节点下增加下一行: ``` plugin/trino-obs ``` 加的位置参考下图,有排序要求。在modules中排序不对,可能编译失败。 4. 编译并安装trino ``` cd trino # 未指定jdk17为默认jdk环境时,可手动指定 export JAVA_HOME=/opt/software/jdk-17.0.10 # 安装maven依赖,跳过docs.为未避免因网络问题无法下载maven中央仓库jar,可通过 -s 手动指定setings.xml路径 mvn -pl '!docs' clean install -DskipTests -s "/UserPath/apache-maven-3.9.5/conf/settings.xml" ``` 备注:官网建议使用 ``` ./mvnw clean install -DskipTests ``` 进行编译,mvnw将自动下载maven文件,并通过maven中央仓库下载依赖包。网络存在问题的情况下会比较慢。 5. 编译trino-obs插件 ``` cd trino/plugin/hive-obs # 打包并跳过test mvn package -DskipTests ``` 编译成功后,trino/plugin/hive-obs/target目录将生成 trino-obs-433.jar文件。 备注:以上 3-5步,可通过IDEA工具进行。
### 8.2 如何更换其他版本的trino trino-obs插件基于trino-433版本进行开发,如果实际应用中trino版本不是433版本,可能需要修改代码,重新编译生成。 1 其他版本的编译基本可参考 8.1 进行。 2 编译中主要需要注意io.trino.hdfs.obs.InternalHiveObsConnectorFactory类。 io.trino.hdfs.obs.InternalHiveObsConnectorFactory类参考:plugin/trino-hive中的io.trino.plugin.hive.InternalHiveConnectorFactory而写。 不同版本trino-hive的中InternalHiveConnectorFactory略有不同,可通过查看不同版本trino-hive中InternalHiveConnectorFactory的源码来修改trino-obs中的InternalHiveObsConnectorFactory类。 可复制trino-hive的中InternalHiveConnectorFactory类的代码到trino-obs的InternalHiveObsConnectorFactory类中,按下图标红的位置进行修改即可。