mpp连接器

本方案旨在通过GDS高速协议来提高openLookeng引擎读取GaussDB的性能。

目前对于GaussDB数据库的数据查询方式是通过JDBC Connector来实现的,和大部分关系型数据库连接类似。由于传统的MySQL等数据库存储的数据量小,因此通过JDBC方式来获取数据无可厚非。但是由于GaussDB是一种MPP类的分布式数据库,存储数据量大,且主要用于OLAP场景的分析,导致通过原生JDBC方式拉取数据的方式变得低效,因为它是一种单进单出的模式。

后来,社区也针对这种情况进行了基于JDBC的优化,例如增加了下推,在引擎端增加了多split并发,但是依然无法避免数据源端的单并发,性能瓶颈依然无法得到完全的解决,而且多并发还会带来多连接的情况,对数据库集群造成一定的压力。

本方案将会通过解决数据源端和引擎端并发问题来提高引擎查询的效率。

mpp连接器设计思路

本方案将mpp类数据库的查询转换成对hive外表的查询,即将mpp类数据库的表数据快速导出到外部的分布式文件系统或分布式缓存,然后通过挂hive外表的方式通过hive connector来进行查询。本方案的主要权衡点在于导出数据的效率和mpp数据库通过单CN节点对外输出数据的效率的比较。随着查询数据量的递增,本方案的效率提高也会越来越高。 更详细的内容见社区分享:https://mp.weixin.qq.com/s/Q-t592UerICHNXI63rhtPg

配置

要配置mpp连接器,在etc/catalog中创建一个目录属性文件,例如mpp.properties,使用以下内容创建文件,并根据设置替换连接属性:

本方案本质上是将查询gaussdb数据库转换成查询hive,因此以下配置均基于此原理。

connector.name=mpp
# 配置用来做最后查询的hive仓库
hive.metastore.uri=thrift://localhost:9083

etl-reuse=false #是否复用本次导数结果

#GDS baseinfo
#gds进程,基于postgres的fdw机制实现的一个快速导数进程,gaussdb官方插件
gds-list=gsfs://localhost:port1|base_path #gds的ip和端口,以及该进程启动时候的basepath,多个gds进程可以通过逗号分隔
aux-url=alluxio://localhost:19998 #alluxio的ip和端口
base-aux=/gdsdata/ #alluxio中用来为gds导出数据服务的路径,可自定义

#hive info
# 用来进行创建外表等操作的hive仓库连接配置
hive-user=username
hive-passwd=password
hive-db=xxx_db
hive-url=jdbc:hive2://localhost:10000/

# hive template
## 进行hive外表创建的相关SQL模板,一般无需更改
hsql-drop=drop table if exists ${table_name}
hsql-create=CREATE EXTERNAL TABLE ${table_name} ( ${schema_info} ) COMMENT 'gds external table' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' LOCATION '${pipe_to_aux_base_path}'

# gsDB connection info
# 要查询的GaussDB数据库相关连接信息
gs-driver=org.postgresql.Driver
gs-url=jdbc:postgresql://localhost:25308/schema
gs-user=user
gs-passwd=password

# gaussdb template
# 利用gds触发导数的相SQL模板,一般无需更改
gsql-create=create foreign table ${gaussdb_name}.ext_${table_name} (   ${schema_info} ) SERVER gsmpp_server OPTIONS ( LOCATION '${gds_foreign_location}',  FORMAT 'text',  DELIMITER E',', NULL '', encoding 'UTF-8', noescaping 'true', EOL E'\\n', out_filename_prefix '${table_name}') WRITE ONLY;
gsql-insert=insert into ${gaussdb_name}.ext_${table_name} select ${schema_info} from ${gaussdb_name}.${table_name};
gsql-drop=drop foreign table if exists ${gaussdb_name}.ext_${table_name};

使用

mpp连接器会将查询转换为对所配置的gaussdb的查询,因此如果你要查询opengauss.testdb.usertbl,如果想通过mpp connector进行快速查询,则可以写成:

select * from mpp.testdb.usertbl;

如果您对mpp connector有更多的需求和见解,欢迎提issue和pr。

有奖捉虫

“有虫”文档片段

0/500

存在的问题

文档存在风险与错误

● 拼写,格式,无效链接等错误;

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 版本号不匹配:文档版本或内容描述和实际软件不一致;

● 对重要数据或系统存在风险的操作,缺少安全提示;

● 排版不美观,影响阅读;

内容描述不清晰

● 描述存在歧义;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

内容获取有困难

● 很难通过搜索引擎,openLooKeng官网,相关博客找到所需内容;

示例代码错误

● 命令、命令参数等错误;

● 命令无法执行或无法完成对应功能;

内容有缺失

● 关键步骤错误或缺失,无法指导用户完成任务,比如安装、配置、部署等;

● 逻辑不清晰,该分类、分项、分步骤的没有给出

● 图形、表格、文字等晦涩难懂

● 缺少必要的前提条件、注意事项等;

● 描述存在歧义

0/500

您对文档的总体满意度

非常不满意
非常满意

请问是什么原因让您参与到这个问题中

您的邮箱

创Issue赢奖品
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
有奖捉虫