联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
6.6.8 共享 Inceptor 元数据
更新时间:12/30/2024, 3:35:18 AM

Inceptor 数据库作为星环科技大数据局基础平台 TDH 中重要的关系型分析引擎,被广泛应用于数据存储和管理。近年,随着分布式数据库 ArgoDB 的成熟和推广,许多用户希望能够在 Inceptor 的基础上同时使用 ArgoDB 的功能,以应对更复杂多变的数据业务场景。

因此,为了满足用户需求的同时减少在技术转型过程中的成本和风险,实现数据和权限都互通,本章节将向您介绍 ArgoDB 共享 Inceptor 元数据的前提准备共享方法以及共享后元数据的功能检验

本章节主要介绍 ArgoDB 与 Inceptor 之间的元数据共享,但思路同样适用于 Slipstream、Search、ArgoDB、Inceptor 之间的元数据共享场景,大家可以自行推广。
前提准备
  1. 确保 Inceptor 和 ArgoDB 所有需要共享的 Quark 服务中存在参数 plsql.compatible.mode,若没有则需升级对应版本的最新 Patch。该参数具体配置方法请参考配置 Quark 参数

  2. 确保目标版本的 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 及以上
  1. 在 TDH 平台上,部署 ArgoDB,必须部署 Quark、Compact Service 服务,其他服务按需条件。若需灾备,需安装 ArgoDBBAR。

    1. 设置 ArgoDB 中的服务依赖于 Inceptor 中以下服务:

      • ArgoDB 所有服务依赖于 Inceptor 的基础公共组件:Zookeeper、KunDB、HDFS、TDDMS、DBAService。

        add dependency
      • ArgoDB 中的所有 Quark、Compact Service 和 ArgodbBAR 服务需要共享元数据依赖于 Inceptor 的 Quark。

        quark depency

        若 ArgoDB 共享的旧版本 Inceptor 使用 TxSQL 管理元数据,则需依赖于 TxSQL 服务(5.2 及以上的 Quark 依赖于 TxSQL,需配置 metainfo 文件):

        argodb5.2 dependon txsql
    2. 参考 《ArgoDB 安装手册》5.2 章节,依次执行安装步骤,完成安装。

  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 服务的整个生命周期中只能配置一次。
  3. 配置参数并重启所有 Quark 服务。

ArgoDB 3.x 及以下

ArgoDB 3.x 及以下版本,由于产品组件依赖关系无法完成元数据共享,需基于数据互通和权限互通两个原则,采用修改 hive-site.xml.ftl 模板文件,或者 Manager 界面自定义参数两种方法进行解决。

  1. 修改 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
    复制
  2. 在 TDH 平台上,部署 ArgoDB,必须部署 ArgodbStorage、ArgodbComputing、Compact Service 服务,其他服务按需条件。若需灾备,需安装 ArgoDBBAR。

    1. 设置 ArgoDB 中的服务依赖于 Inceptor 中的基础公共组件:Zookeeper、TxSQL、HDFS、TDDMS、DBAService。

      • ArgodbComputing 服务不要添加 MetaStore 和 Ladder 依赖

      • ArgoDBStorage 服务不要添加 Ladder 依赖

      • Compact Service 服务不要添加 MetaStore依赖

    2. 参考部署 ArgoDB 标准版,依次执行安装步骤,完成安装。

  3. 配置支持元数据共享

    方法一:修改 hive-site.xml.ftl 模板文件
    1. 进入 ArgoDB 中的 Quark 模板文件,路径为 /var/lib/transwarp-manager/master/content/meta/services/QUARK/quark-xxxx/templates/hive-site.xml.ftl

    2. 手动修改写定 hive.metastore.service.id 和对应的 javax.jdo.option.ConnectionURL 配置项。

      hive site xml ftl config
      javax.jdo.option.ConnectionURL/METASTORE_ID 参数可能会起作用,需注意避免。
    方法二:Manager 自定义参数
    • 在 ArgodbStorage 服务中自定义参数 javax.jdo.option.ConnectionURL

    • 在 ArgodbComputing 服务中自定义参数 hive.metastore.service.id,设置依赖的需要共享元数据的 Inceptor 名称。

      参数取值方式可参考对应模板文件 hive-site.xml.ftl
  4. 配置 Quark 服务参数,共享元数据。

    1. 在 ArgoDB 和 Inceptor 所有需要共享的 Quark 服务中同时配置以下参数,使 ArgoDB 和 TDH 的 Quark Metastore 能够互相共享兼容元信息:

      datanucleus.schema.autoCreateSchema=true
      datanucleus.schema.autoCreateTables=true
      hive.metastore.schema.verification=false
      datanucleus.autoStartMechanismMode=ignored
      复制
    2. 除了使用 PLSQL 最多的 Quark,其余所有 Quark 服务中都需要添加如下配置:

      plsql.compatible.mode = true
      复制
      • 当默认为 false 时:会直接反序列化元信息中的 PLSQL 并进行执行。若 PLSQL 的时间较早或反序列化失败,则会用 PLSQL 对象的文本重新编译,并且存入元信息,然后再执行。设置 PLSQL 使用最多的 Inceptor 该参数为 false。

      • 当设置为 true 时:将不会从元信息反序列化 PLSQL 对象,而是每次执行都重新编译 PLSQL 对象的文本,且不会将编译结果序列化到元信息中。设置其他剩余 Quark 都为 true。

        本参数建议在 Quark 服务的整个生命周期中只能配置一次。
  5. 配置参数并重启对应服务。

问题处理

问题 1:

如果 DBA Service 等 Inceptor 基础服务的部署版本低于 ArgoDB 允许依赖的最低版本时,会导致 ArgoDB 服务无法依赖 Inceptor 的问题。

解决方式:修改 ArgoDB 中服务的 metainfo.yaml 文件中的 dependencies 配置,调整允许依赖的最低版本。如下所示:

  1. 修改 ArgoDB 中 Quark 服务的最低以来版本

    vim /var/lib/transwarp-manager/master/content/meta/services/QUARK/quark-8.25/metainfo.yaml
    复制
  2. 在 metainfo.yaml 文件中的 dependencies 中,修改 DBA_Service 的最低组件版本,模板如下:

    - name: 依赖组件名称,如 DBA_Service
      minVersion: 依赖组件允许的最低版本
      optional: true 代表非必选依赖
    复制
  3. 重启 Manager

    systemctl restart transwarp-manager
    复制

问题 2:

对于高版本的 ArgoDB(5.2 及以上版本)共享低版本 Inceptor 时(如 TDH 622),ArgoDB 中的 Quark 服务无法依赖 TxSQL

解决方法:修改 ArgoDB 中服务的 metainfo.yaml 文件中的 dependencies 配置,添加 TxSQL 依赖。如下所示:

  1. 修改 ArgoDB 中 Quark 服务的最低以来版本

    vim /var/lib/transwarp-manager/master/content/meta/services/QUARK/quark-8.31/metainfo.yaml
    复制
  2. 在 metainfo.yaml 文件中的 dependencies 中,添加 TxSQL 依赖。如下所示:

    - name: TXSQL
      minVersion: transwarp-6.2.1-final
      optional: true
      preferred: false
    复制
  3. 重启 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:

guardian matadata checkout

数据互通检验

当 ArgoDB 共享了 Inceptor 的元数据后,同一用户登录Inceptor和ArgoDB看到的库表信息是一样。用户在使用 ArgoDB、TDH 的时候可以像使用同一款产品一样方便。

创建 TORC 表
-- 创建表
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;
复制
创建Hyperdrive表(需依赖Hyperbase)
-- 创建表
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;
复制
创建 Esdrive 表(需依赖 Search)
-- 创建表
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;
复制