
Inceptor 数据库作为星环科技大数据局基础平台 TDH 中重要的关系型分析引擎,被广泛应用于数据存储和管理。近年,随着分布式数据库 ArgoDB 的成熟和推广,许多用户希望能够在 Inceptor 的基础上同时使用 ArgoDB 的功能,以应对更复杂多变的数据业务场景。
本章节主要介绍 ArgoDB 与 Inceptor 之间的元数据共享,但思路同样适用于 Slipstream、Search、ArgoDB、Inceptor 之间的元数据共享场景,大家可以自行推广。 |
前提准备
-
确保 Inceptor 和 ArgoDB 所有需要共享的 Quark 服务中存在参数
plsql.compatible.mode
,若没有则需升级对应版本的最新 Patch。该参数具体配置方法请参考配置 Quark 参数 -
确保目标版本的 ArgoDB 产品包已经上传至 Inceptor 集群。ArgoDB 与 Inceptor 的版本兼容情况如下:
ArgoDB 版本 TDH 最低要求版本 5.x
6.2
3.2.2
6.2
其中使用 PLSQL 最多的 Quark 需设为 false ,其余所有 Quark 需设为 true。
-
当该参数为 false 时:会直接反序列化元信息中的 PLSQL 并进行执行。若 PLSQL 的时间较早或反序列化失败,则会用 PLSQL 对象的文本重新编译,并且存入元信息,然后再执行。
-
当该参数设置为 true 时:将不会从元信息反序列化 PLSQL 对象,而是每次执行都重新编译 PLSQL 对象的文本,且不会将编译结果序列化到元信息中。
-
共享操作
ArgoDB 共享 Inceptor 元数据操作基于版本主要有以下两种不同方式:
-
ArgoDB 5.x 及以上版本共享方式
-
ArgoDB 3.x 及以下版本共享方式
ArgoDB 5.x 及以上
-
在 TDH 平台上,部署 ArgoDB,必须部署 Quark、Compact Service 服务,其他服务按需条件。若需灾备,需安装 ArgoDBBAR。
-
设置 ArgoDB 中的服务依赖于 Inceptor 中以下服务:
-
ArgoDB 所有服务依赖于 Inceptor 的基础公共组件:Zookeeper、KunDB、HDFS、TDDMS、DBAService。
-
ArgoDB 中的所有 Quark、Compact Service 和 ArgodbBAR 服务需要共享元数据依赖于 Inceptor 的 Quark。
若 ArgoDB 共享的旧版本 Inceptor 使用 TxSQL 管理元数据,则需依赖于 TxSQL 服务(5.2 及以上的 Quark 依赖于 TxSQL,需配置 metainfo 文件):
-
-
参考 《ArgoDB 安装手册》5.2 章节,依次执行安装步骤,完成安装。
-
-
在 ArgoDB 和 Inceptor 所有需要共享的 Quark 服务中同时配置以下参数,使 ArgoDB 和 TDH 的 Quark Metastore 能够互相共享兼容元信息:
datanucleus.schema.autoCreateSchema=true datanucleus.schema.autoCreateTables=true hive.metastore.schema.verification=false datanucleus.autoStartMechanismMode=ignored
复制除了使用 PLSQL 最多的 Quark,其余所有 Quark 服务中都需要添加如下配置:
plsql.compatible.mode = true
复制-
当默认为 false 时:会直接反序列化元信息中的 PLSQL 并进行执行。若 PLSQL 的时间较早或反序列化失败,则会用 PLSQL 对象的文本重新编译,并且存入元信息,然后再执行。设置 PLSQL 使用最多的 Quark 该参数为 false。
-
当设置为 true 时:将不会从元信息反序列化 PLSQL 对象,而是每次执行都重新编译 PLSQL 对象的文本,且不会将编译结果序列化到元信息中。设置其他剩余 Quark 都为 true。
本参数建议在 Quark 服务的整个生命周期中只能配置一次。
-
-
配置参数并重启所有 Quark 服务。
ArgoDB 3.x 及以下
ArgoDB 3.x 及以下版本,由于产品组件依赖关系无法完成元数据共享,需基于数据互通和权限互通两个原则,采用修改 hive-site.xml.ftl 模板文件,或者 Manager 界面自定义参数两种方法进行解决。
-
修改 ArgoDB 中 ArgodbStorage、ArgodbComputing、Compact Service 服务的 Metainfo 文件(路径参考如下),配置 dependencies 中相关组件的版本限制,保证服务可以正常依赖 Inceptor 基础服务。
/var/lib/transwarp-manager/master/content/meta/services/ARGODB_COMPUTING/argodb-3.2.0.final/metainfo.yaml /var/lib/transwarp-manager/master/content/meta/services/ARGODB_STORAGE/argodb-3.2.0.final/metainfo.yaml /var/lib/transwarp-manager/master/content/meta/services/COMPACT_SERVICE/argodb-3.2.0.final/metainfo.yaml
复制 -
在 TDH 平台上,部署 ArgoDB,必须部署 ArgodbStorage、ArgodbComputing、Compact Service 服务,其他服务按需条件。若需灾备,需安装 ArgoDBBAR。
-
设置 ArgoDB 中的服务依赖于 Inceptor 中的基础公共组件:Zookeeper、TxSQL、HDFS、TDDMS、DBAService。
-
ArgodbComputing 服务不要添加 MetaStore 和 Ladder 依赖
-
ArgoDBStorage 服务不要添加 Ladder 依赖
-
Compact Service 服务不要添加 MetaStore依赖
-
-
参考部署 ArgoDB 标准版,依次执行安装步骤,完成安装。
-
-
配置支持元数据共享
方法一:修改 hive-site.xml.ftl 模板文件-
进入 ArgoDB 中的 Quark 模板文件,路径为 /var/lib/transwarp-manager/master/content/meta/services/QUARK/quark-xxxx/templates/hive-site.xml.ftl
-
手动修改写定
hive.metastore.service.id
和对应的javax.jdo.option.ConnectionURL
配置项。javax.jdo.option.ConnectionURL/METASTORE_ID
参数可能会起作用,需注意避免。
方法二:Manager 自定义参数-
在 ArgodbStorage 服务中自定义参数
javax.jdo.option.ConnectionURL
-
在 ArgodbComputing 服务中自定义参数
hive.metastore.service.id
,设置依赖的需要共享元数据的 Inceptor 名称。参数取值方式可参考对应模板文件 hive-site.xml.ftl
-
-
配置 Quark 服务参数,共享元数据。
-
在 ArgoDB 和 Inceptor 所有需要共享的 Quark 服务中同时配置以下参数,使 ArgoDB 和 TDH 的 Quark Metastore 能够互相共享兼容元信息:
datanucleus.schema.autoCreateSchema=true datanucleus.schema.autoCreateTables=true hive.metastore.schema.verification=false datanucleus.autoStartMechanismMode=ignored
复制 -
除了使用 PLSQL 最多的 Quark,其余所有 Quark 服务中都需要添加如下配置:
plsql.compatible.mode = true
复制-
当默认为 false 时:会直接反序列化元信息中的 PLSQL 并进行执行。若 PLSQL 的时间较早或反序列化失败,则会用 PLSQL 对象的文本重新编译,并且存入元信息,然后再执行。设置 PLSQL 使用最多的 Inceptor 该参数为 false。
-
当设置为 true 时:将不会从元信息反序列化 PLSQL 对象,而是每次执行都重新编译 PLSQL 对象的文本,且不会将编译结果序列化到元信息中。设置其他剩余 Quark 都为 true。
本参数建议在 Quark 服务的整个生命周期中只能配置一次。
-
-
-
配置参数并重启对应服务。
问题处理
问题 1:
如果 DBA Service 等 Inceptor 基础服务的部署版本低于 ArgoDB 允许依赖的最低版本时,会导致 ArgoDB 服务无法依赖 Inceptor 的问题。
解决方式:修改 ArgoDB 中服务的 metainfo.yaml
文件中的 dependencies
配置,调整允许依赖的最低版本。如下所示:
对于高版本的 ArgoDB(5.2 及以上版本)共享低版本 Inceptor 时(如 TDH 622),ArgoDB 中的 Quark 服务无法依赖 TxSQL
解决方法:修改 ArgoDB 中服务的 metainfo.yaml
文件中的 dependencies
配置,添加 TxSQL 依赖。如下所示:
-
修改 ArgoDB 中 Quark 服务的最低以来版本
vim /var/lib/transwarp-manager/master/content/meta/services/QUARK/quark-8.31/metainfo.yaml
复制 -
在 metainfo.yaml 文件中的
dependencies
中,添加 TxSQL 依赖。如下所示:- name: TXSQL minVersion: transwarp-6.2.1-final optional: true preferred: false
复制 -
重启 Manager
systemctl restart transwarp-manager
复制
问题 3:
重启 Quark Metastore 时报错 “View 'metastore_inceptor1.list_partitions_v' references invalid table(s) or column(s) or function(s) or definer/in”
解决方式:连接进入 TxSQL 数据库,删除 metastore 库中的 list_partitions_v 视图,然后再重启 Quark Metastore。
检查 Inceptor 前期是否配置过 datanucleus.schema.autoCreateAll 参数,该参数已废除请删除。
功能检验
权限互通检验
登录 Guardian 服务,查看同一用户对于 ArgoDB 访问的权限服务 ID 为 Inceptor:

数据互通检验
当 ArgoDB 共享了 Inceptor 的元数据后,同一用户登录Inceptor和ArgoDB看到的库表信息是一样。用户在使用 ArgoDB、TDH 的时候可以像使用同一款产品一样方便。
-- 创建表 CREATE TABLE torc_table( id int, name STRING ) clustered by (id) into 3 buckets STORED AS ORC tblproperties("transactional"="true"); -- 插入一条数据 insert into torc_table values(1,"zhangsan"); -- 查询数据 select * from torc_table;
复制
-- 创建表 CREATE TABLE bank_info( acc_num STRING, name STRING, password STRING, email STRING, cellphone STRING, balance DOUBLE )STORED AS HYPERDRIVE; -- 插入一条数据 insert into table bank_info values("0001", "Zhang San", "5678", "zs@mail.com", "12345678912", "10000.0"); -- 查询数据 select * from bank_info;
复制
-- 创建表 CREATE TABLE esdrive_start( key1 STRING, content STRING, tint INT, tbool BOOLEAN )STORED AS ES with shard number 10 replication 1; -- 插入一条数据 INSERT INTO TABLE esdrive_start(key1, content, tint, tbool) VALUES ('1', 'esdrive is a good sql engine', 1 , true); -- 查询数据 select * from esdrive_start;
复制