# HuaweiCloud-Presto-plugins
**Repository Path**: HuaweiCloudDeveloper/huaweicloud-presto-plugins
## Basic Information
- **Project Name**: HuaweiCloud-Presto-plugins
- **Description**: 本项目将基于Presto的扩展式connector机制,完成对华为云OBS,DataArts,DWS的支持,包含但不限于提供功能文档,使用文档,代码贡献到Presto&Trino仓库等等
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-09-27
- **Last Updated**: 2024-08-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 一 背景
Presto是Facebook开源的,完全基于内存内存的并⾏计算,分布式SQL交互式查询引擎,采用Massively parallel processing (MPP)架构,多个节点管道式执⾏,⽀持任意数据源(通过扩展式Connector组件),数据规模GB~PB级。
# 二 项目简介
本项目将基于Presto的扩展式connector机制,完成对华为云OBS,DataArts,DWS的支持,包含但不限于提供功能文档,使用文档,代码贡献到Presto&Trino仓库等等。
# 三 参考资料
- [OBS](https://support.huaweicloud.com/bestpractice-obs/obs_05_1507.html)
- [Presto Connector](https://prestodb.io/docs/current/connector.html)
# 四 对接华为OBS使用说明
## 1 安装软件版本说明
1. Java 8
2. Hadoop 3.3.5
3. hive 3.1.3
4. presto-0.283
4. 使配置文件生效
```
source /etc/profile
```
5. 检查配置是否生效,出现java版本信息,代表配置生效
```
java -version
```
2. 上传到服务器 /opt/software 目录下,将其解压即可,无需配置环境变量:
```
cd /opt/software
tar -zxvf hadoop-3.3.5.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
```
#### 3.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无法启动。
4. 配置MySql数据库信息和obs访问信息
(1)新建hive-site.xml文件:
```
cd $HIVE_HOME/conf
vim hive-site.xml
```
(2)配置mysql数据库信息和obs信息,将一下信息复制到hive-site.xml中:
```
日志中看到:SERVER STARTED,即表示presto启动成功。
| 序号 | 配置项 | 说明 | 备注 |
|---|---|---|---|
| 1 | hive.obs.access-key | 默认使用的OBS访问密钥 | |
| 2 | hive.obs.secret-key | 默认使用的OBS密钥 | |
| 3 | hive.obs.endpoint | OBS存储节点区域 | |
| 4 | hive.obs.security-token | 临时AK/SK对应的securityToken | |
| 5 | hive.obs.storage-class | 写入数据时使用的OBS存储类。目前仅支持STANDARD和WARM存储类。默认存储类别是STANDARD | 存储类别说明详见:https://support.huaweicloud.com/intl/zh-cn/ugobs-obs/obs_41_0006.html |
| 6 | hive.obs.path-style-access | 设置是否使用路径访问方式访问OBS服务,true使用路径访问方式,false使用虚拟主机访问方式,默认值:false 注意:如果设置了路径方式,无法使用OBS 3.0版本桶的新特性 | |
| 7 | hive.obs.ssl.enabled | 使用HTTPS与OBS API通信(默认为true) | |
| 8 | hive.obs.sse.enabled | 服务端加密(默认为false) | |
| 9 | hive.obs.sse.type | 服务端加密方式,可选:KMS或C | 加密方式说明详见:https://support.huaweicloud.com/intl/zh-cn/api-obs/obs_04_0105.html |
| 10 | hive.obs.sse.kms-key-id | 服务器端加密时,采取SSE-KMS加密时,用于使用KMS管理的密钥进行OBS服务器端加密的KMS密钥ID。如果未设置,则使用默认密钥。 | |
| 11 | hive.obs.sse.c-key-base64 | 服务器端加密时,采取SSE-C加密,客户端提供的加密密钥的Base64编码。 | 可参考:https://support.huaweicloud.com/intl/zh-cn/sdk-java-devg-obs/obs_21_2119.html 生成加密密钥的Base64编码(对应的customerKey变量)。 |
| 12 | hive.obs.max-client-retries | 最大读重试次数,默认5次。 | |
| 13 | hive.obs.max-error-retries | 与OBS通信时遇到错误时尝试重新操作(如读取、写入等)的最大次数;默认10次。 | |
| 14 | hive.obs.max-backoff-time | 连续的重试之间允许的最大等待时间;默认10m(10分钟)。 | 可以用 ns\us\ms\s\m\h\d 单位。 |
| 15 | hive.obs.max-retry-time | 重试与OBS通信的最长时间,默认10分钟。 | 可以用 ns\us\ms\s\m\h\d 结尾。 |
| 16 | hive.obs.connect-timeout | TCP连接超时时间,默认5秒。 | 可以用 ns\us\ms\s\m\h\d 结尾。 |
| 17 | hive.obs.socket-timeout | TCP套接字读取超时时间,默认5秒。 | 可以用 ns\us\ms\s\m\h\d 结尾。 |
| 18 | hive.obs.max-connections | 与OBS的最大连接数,默认500. | |
| 19 | hive.obs.staging-directory | 上传前暂存文件的临时目录,默认使用java.io.tmpdir目录。 | |
| 20 | hive.obs.upload-acl-type | 上传文件到OBS时可以使用的ACL,默认private | 访问控制列表说明详见: https://support.huaweicloud.com/intl/zh-cn/perms-cfg-obs/obs_40_0005.html |
| 21 | hive.obs.skip-glacier-objects | 忽略Glacier对象,包含COLD、DEEP_ARCHIVE2类存储类别。默认为false。 | https://support.huaweicloud.com/intl/zh-cn/ugobs-obs/obs_41_0006.html |
| 22 | hive.obs.streaming.enabled | 是否启用流式传输模式。默认为true。 | |
| 23 | hive.obs.streaming.part-size | 设置流式传输的分段大小。默认16MB。 | 可以用 B\KB\MB\GB\TB\PB作为单位结尾。 |
4. 编译并安装presto
```
cd presto
./mvnw clean install -DskipTests
```
进行编译,mvnw将自动下载maven文件,并通过maven中央仓库下载依赖包缓存在本地存储库 ( `~/.m2/repository` ) 中,。网络存在问题的情况下会比较慢。
如果因为网络问题无法编译成功,可以执行
```bash
./mvnw -v
```
命令,通过返回的Maven Home 路径,修改对应maven中的settings.xml文件,配置mirror节点,设置为国内的maven仓库地址,比如:
```xml
(2)HiveObsClientModule类。
此类参考presto-hive中HiveClientModule类所写,主要为绑定PrestoObsClientFactory类,删掉S3SelectRecordCursorProvider类的绑定。
可复制presto-hive的中HiveClientModule类的代码到presto-obs的HiveObsClientModule类中,按下图标红的位置修改,删除黄色标记代码即可。
