更新时间:2025-07-18 GMT+08:00

跨集群访问Hive Metastore

大数据融合分析时代,存算分离数仓如需远端访问MRS的Hive数据源(包括Hive对接HDFS和Hive对接OBS两种场景),可通过建立EXTERNAL SCHEMA实现。该功能仅9.1.0及以上版本支持。

准备环境

  • 已创建 存算分离集群和MRS分析集群,需确保MRS和DWS集群在同一个区域、可用区、同一VPC子网内,确保集群网络互通。

约束与限制

  • 目前仅支持对接EXTERNAL SCHEMA对应的Hive端数据库的表进行SELECT、INSERT和INSERT OVERWRITE操作,其余操作均不支持。
  • MRS端两种数据源对应格式支持的操作参见表1
    表1 MRS端数据源支持的操作

    数据源

    表类型

    操作

    TEXT

    CSV

    PARQUET

    ORC

    HDFS

    非分区表

    SELECT

    INSERT/INSERT OVERWRITE

    x

    x

    分区表

    SELECT

    INSERT/INSERT OVERWRITE

    x

    x

    OBS

    非分区表

    SELECT

    INSERT/INSERT OVERWRITE

    x

    x

    分区表

    SELECT

    x

    x

    INSERT/INSERT OVERWRITE

    x

    x

  • 不再保证事务原子性,事务失败后,不再保证数据一致性;不支持回滚。
  • 不支持通过EXTERNAL SCHEMA对hive端创建的表进行GRANT和REVOKE操作。
  • 并发支持:DWS、HIVE、SPARK并发读写,会出现脏读问题;对同一张非分区表或者同一张分区表的同一个分区执行包含INSERT OVERWRITE相关的并发操作无法保证预期结果,请不要执行此类操作。
  • Hive Metastore特性不支持联邦机制。

基本流程

  1. 在Hive端创建表。
  2. 在Hive端插入数据或者通过将本地txt数据文件上传至OBS桶,再通过OBS桶导入Hive,并由txt存储表导入ORC存储表。
  3. 创建MRS数据源连接。
  4. 创建外部服务器。
  5. 创建EXTERNAL SCHEMA。
  6. 通过EXTERNAL SCHEMA对Hive表进行导入或者读取操作。

准备MRS的ORC表数据源

  1. 本地PC新建一个product_info.txt,并拷贝以下数据,保存到本地。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    100,XHDK-A-1293-#fJ3,2017-09-01,A,2017 Autumn New Shirt Women,red,M,328,2017-09-04,715,good
    205,KDKE-B-9947-#kL5,2017-09-01,A,2017 Autumn New Knitwear Women,pink,L,584,2017-09-05,406,very good!
    300,JODL-X-1937-#pV7,2017-09-01,A,2017 autumn new T-shirt men,red,XL,1245,2017-09-03,502,Bad.
    310,QQPX-R-3956-#aD8,2017-09-02,B,2017 autumn new jacket women,red,L,411,2017-09-05,436,It's really super nice
    150,ABEF-C-1820-#mC6,2017-09-03,B,2017 Autumn New Jeans Women,blue,M,1223,2017-09-06,1200,The seller's packaging is exquisite
    200,BCQP-E-2365-#qE4,2017-09-04,B,2017 autumn new casual pants men,black,L,997,2017-09-10,301,The clothes are of good quality.
    250,EABE-D-1476-#oB1,2017-09-10,A,2017 autumn new dress women,black,S,841,2017-09-15,299,Follow the store for a long time.
    108,CDXK-F-1527-#pL2,2017-09-11,A,2017 autumn new dress women,red,M,85,2017-09-14,22,It's really amazing to buy
    450,MMCE-H-4728-#nP9,2017-09-11,A,2017 autumn new jacket women,white,M,114,2017-09-14,22,Open the package and the clothes have no odor
    260,OCDA-G-2817-#bD3,2017-09-12,B,2017 autumn new woolen coat women,red,L,2004,2017-09-15,826,Very favorite clothes
    980,ZKDS-J-5490-#cW4,2017-09-13,B,2017 Autumn New Women's Cotton Clothing,red,M,112,2017-09-16,219,The clothes are small
    98,FKQB-I-2564-#dA5,2017-09-15,B,2017 autumn new shoes men,green,M,4345,2017-09-18,5473,The clothes are thick and it's better this winter.
    150,DMQY-K-6579-#eS6,2017-09-21,A,2017 autumn new underwear men,yellow,37,2840,2017-09-25,5831,This price is very cost effective
    200,GKLW-l-2897-#wQ7,2017-09-22,A,2017 Autumn New Jeans Men,blue,39,5879,2017-09-25,7200,The clothes are very comfortable to wear
    300,HWEC-L-2531-#xP8,2017-09-23,A,2017 autumn new shoes women,brown,M,403,2017-09-26,607,good
    100,IQPD-M-3214-#yQ1,2017-09-24,B,2017 Autumn New Wide Leg Pants Women,black,M,3045,2017-09-27,5021,very good.
    350,LPEC-N-4572-#zX2,2017-09-25,B,2017 Autumn New Underwear Women,red,M,239,2017-09-28,407,The seller's service is very good
    110,NQAB-O-3768-#sM3,2017-09-26,B,2017 autumn new underwear women,red,S,6089,2017-09-29,7021,The color is very good 
    210,HWNB-P-7879-#tN4,2017-09-27,B,2017 autumn new underwear women,red,L,3201,2017-09-30,4059,I like it very much and the quality is good.
    230,JKHU-Q-8865-#uO5,2017-09-29,C,2017 Autumn New Clothes with Chiffon Shirt,black,M,2056,2017-10-02,3842,very good
    

  2. 登录OBS控制台,单击“创建并行文件系统”,填写以下参数,单击“立即创建”,等待并行文件系统创建好。

    表2 桶参数

    参数项

    取值

    区域

    根据实际环境选择区域。

    数据冗余存储策略

    单AZ存储

    桶名称

    mrs-datasource

    默认存储类别

    标准存储

    桶策略

    私有

    默认加密

    关闭

    归档数据直读

    关闭

    企业项目

    default

    标签

    -

  3. 切换回MRS控制台,单击创建好的MRS集群名称,进入“概览”,单击“IAM用户同步”所在行的“同步”,等待约5分钟同步完成。
  4. 单击“节点管理”,单击任意一台master节点,进入该节点页面,切换到“弹性公网IP”,单击“绑定弹性公网IP”,勾选已有弹性IP并单击“确定”,如果没有,请创建。记录此公网IP。
  5. (可选)Hive对接OBS。

    Hive对接OBS场景下执行该步骤,对接HDFS场景请跳过。

    1. 回到MRS集群页面,单击集群名称进入“概览”,单击“前往Manager”,如果提示绑定公网IP,请先绑定公网IP。
    2. 如果弹出访问MRS Manager对话框,单击“确定”,页面会跳转到MRS登录页面。输入MRS Manager的用户名admin和密码,密码为创建MRS集群时输入的admin密码。
    3. 参见Hive对接OBS文件系统完成Hive对接OBS的操作。

  6. 下载客户端。

    1. 回到MRS集群页面,单击集群名称进入“概览”,单击“前往Manager”,如果提示绑定公网IP,请先绑定公网IP。
    2. 如果弹出访问MRS Manager对话框,单击“确定”,页面会跳转到MRS登录页面。输入MRS Manager的用户名admin和密码,密码为创建MRS集群时输入的admin密码。
    3. 登录成功后,选择“服务管理 > 下载客户端”,“客户端类型”选择“仅配置文件”,“下载路径”选择“服务器端”。单击“确定”。

  7. 使用root用户登录主master节点,并更新主管理节点的客户端配置。

    cd /opt/client

    sh refreshConfig.sh /opt/client 客户端配置文件压缩包完整路径

    本例命令为:

    sh refreshConfig.sh /opt/client /tmp/MRS-client/MRS_Services_Client.tar

  8. 切换到omm用户,并进入Hive客户端所在目录。

    su - omm

    cd /opt/client

  9. 在Hive上创建存储类型为TEXTFILE的表product_info。

    1. 在/opt/client路径下,导入环境变量。

      source bigdata_env

      提示:若出现find:'opt/client/Hudi': Permission denied 可忽略,不影响后续操作。

    2. 登录Hive客户端。
      1. 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建Hive表的权限,具体操作请参见《MapReduce服务用户指南》中的创建角色
      2. 配置拥有对应权限的角色,具体操作请参见《MapReduce服务用户指南》中的创建用户。 为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行如下命令。

        kinit MRS集群用户

      3. 执行以下命令启动Hive客户端:

        beeline

    3. 依次执行以下SQL语句创建demo数据库及表product_info。
      1
      CREATE DATABASE demo;
      
      1
      USE demo;
      
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      DROP TABLE product_info;
      
      CREATE TABLE product_info 
      (    
          product_price                int            ,
          product_id                   char(30)       ,
          product_time                 date           ,
          product_level                char(10)       ,
          product_name                 varchar(200)   ,
          product_type1                varchar(20)    ,
          product_type2                char(10)       ,
          product_monthly_sales_cnt    int            ,
          product_comment_time         date           ,
          product_comment_num          int        ,
          product_comment_content      varchar(200)                   
      ) 
      row format delimited fields terminated by ',' 
      stored as TEXTFILE;
      

  10. 将product_info.txt数据文件导入Hive。

    • Hive对接OBS场景:回到OBS管理控制台,单击并行文件系统名称,选择“对象 > 上传对象”,将product_info.txt上传至OBS并行文件系统中product_info表路径下。
    • Hive对接HDFS场景:将product_info.txt文件导入到HDFS路径/user/hive/warehouse/demo.db/product_info/,有关导入数据到MRS集群的操作,请参见《MapReduce服务用户指南》中的管理数据文件章节。

  11. 创建ORC表,并将数据导入ORC表。

    1. 执行以下SQL语句创建ORC表。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      DROP TABLE product_info_orc;
      
      CREATE TABLE product_info_orc
      (    
          product_price                int            ,
          product_id                   char(30)       ,
          product_time                 date           ,
          product_level                char(10)       ,
          product_name                 varchar(200)   ,
          product_type1                varchar(20)    ,
          product_type2                char(10)       ,
          product_monthly_sales_cnt    int            ,
          product_comment_time         date           ,
          product_comment_num          int            ,
          product_comment_content      varchar(200)                   
      ) 
      row format delimited fields terminated by ',' 
      stored as orc;
      
    2. 将product_info表的数据插入到Hive ORC表product_info_orc中。
      1
      insert into product_info_orc select * from product_info;
      
    3. 查询ORC表数据导入成功。
      1
      select * from product_info_orc;
      

创建MRS数据源连接

  1. 登录DWS控制台,单击已创建好的DWS集群,确保DWS集群与MRS在同一个区域、可用分区,并且在同一VPC子网下。
  2. 切换到“MRS数据源”,单击“创建MRS数据源连接”。
  3. 配置以下参数,单击“确认”。

    • 数据源名称:mrs_server
    • 配置方式:MRS用户
    • MRS数据源:选择前面创建的mrs_01集群。
    • MRS用户:admin
    • 用户密码:前面创建MRS数据源的admin密码。

创建外部服务器

仅Hive对接OBS场景执行,Hive对接HDFS场景跳过。

  1. 使用Data Studio连接已创建好的DWS集群。
  1. 执行以下语句,创建外部服务器。

    认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE SERVER obs_server FOREIGN DATA WRAPPER DFS_FDW 
    OPTIONS 
    (
    address 'obs.example.com:5443',   //OBS的访问地址
    encrypt 'on',
    access_key '{AK值}',
    secret_access_key '{SK值}'
     type 'obs'
    );
    

  2. 查看外部服务器。

    1
    SELECT * FROM pg_foreign_server WHERE srvname='obs_server';
    

    返回结果如下所示,表示已经创建成功:

    1
    2
    3
    4
                         srvname                      | srvowner | srvfdw | srvtype | srvversion | srvacl |                                                     srvoptions
    --------------------------------------------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------
     obs_server |    16476 |  14337 |         |            |        | {address=obs.example.com:5443,type=obs,encrypt=on,access_key=***,secret_access_key=***}
    (1 row)
    

创建EXTERNAL SCHEMA

  1. 获取Hive的metastore服务内网IP和端口以及要访问的Hive端数据库名称。

    1. 登录MRS控制台
    2. 选择“集群列表 > 现有集群”,单击要查看的集群名称,进入集群基本信息页面。
    3. 单击运维管理处的“前往manager”,并输入用户名和密码登录管理页面。
    4. 依次单击“集群”、“Hive”、“配置”、“全部配置”、“MetaStore”、“端口”,记录参数hive.metastore.port对应的值。
    5. 依次单击“集群”、“Hive”、“实例”,记录MetaStore对应主机名称包含master1的管理IP。

  2. 创建EXTERNAL SCHEMA。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //Hive对接OBS场景:SERVER名字填写创建的外部服务器名称DATABASE填写Hive端创建的数据库METAADDRESS填写中记录的hive端metastore服务的地址和端口CONFIGURATION为MRS数据源默认的配置路径,不需更改。
    DROP SCHEMA IF EXISTS ex1;
    
    CREATE EXTERNAL SCHEMA ex1
        WITH SOURCE hive
             DATABASE 'demo'
             SERVER obs_server
             METAADDRESS '***.***.***.***:***'
             CONFIGURATION '/MRS/gaussdb/mrs_server'
    
    //Hive对接HDFS场景SERVER名字填写创建的数据源名称mrs_serverMETAADDRESS填写中记录的hive端metastore服务的地址和端口CONFIGURATION为MRS数据源默认的配置路径,不需更改。
    DROP SCHEMA IF EXISTS ex1;
    
    CREATE EXTERNAL SCHEMA ex1
        WITH SOURCE hive
             DATABASE 'demo'
             SERVER mrs_server
             METAADDRESS '***.***.***.***:***'
             CONFIGURATION '/MRS/gaussdb/mrs_server'
    

  3. 查看创建的EXTERNAL SCHEMA

    1
    2
    3
    4
    5
    6
    SELECT * FROM pg_namespace WHERE nspname='ex1';
    SELECT * FROM pg_external_namespace WHERE nspid = (SELECT oid FROM pg_namespace WHERE nspname = 'ex1');
                         nspid                     | srvname | source | address | database | confpath |                                                     ensoptions   | catalog
    --------------------------------------------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------
                      16393                        |    obs_server |  hive | ***.***.***.***:***        |  demo          | ***       |                         |
    (1 row)
    

执行数据导入

  1. 创建本地目标表。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    DROP TABLE IF EXISTS product_info;
    CREATE TABLE product_info
    (
        product_price                integer        ,
        product_id                   char(30)       ,
        product_time                 date           ,
        product_level                char(10)       ,
        product_name                 varchar(200)   ,
        product_type1                varchar(20)    ,
        product_type2                char(10)       ,
        product_monthly_sales_cnt    integer        ,
        product_comment_time         date           ,
        product_comment_num          integer        ,
        product_comment_content      varchar(200)                   
    ) ;
    

  2. 从Hive表导入目标表。

    1
    INSERT INTO product_info SELECT * FROM ex1.product_info_orc;
    

  3. 查询导入结果。

    1
    SELECT * FROM product_info;
    

执行数据导出

  1. 创建本地源表。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    DROP TABLE IF EXISTS product_info_export;
    CREATE TABLE product_info_export
    (
        product_price                integer        ,
        product_id                   char(30)       ,
        product_time                 date           ,
        product_level                char(10)       ,
        product_name                 varchar(200)   ,
        product_type1                varchar(20)    ,
        product_type2                char(10)       ,
        product_monthly_sales_cnt    integer        ,
        product_comment_time         date           ,
        product_comment_num          integer        ,
        product_comment_content      varchar(200)                   
    ) ;
    INSERT INTO product_info_export SELECT * FROM product_info;
    

  2. Hive端创建目标表。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    DROP TABLE product_info_orc_export;
    
    CREATE TABLE product_info_orc_export
    (    
        product_price                int            ,
        product_id                   char(30)       ,
        product_time                 date           ,
        product_level                char(10)       ,
        product_name                 varchar(200)   ,
        product_type1                varchar(20)    ,
        product_type2                char(10)       ,
        product_monthly_sales_cnt    int            ,
        product_comment_time         date           ,
        product_comment_num          int            ,
        product_comment_content      varchar(200)                   
    ) 
    row format delimited fields terminated by ',' 
    stored as orc;
    

  3. 从本地源表导入Hive表。

    1
    INSERT INTO ex1.product_info_orc_export SELECT * FROM product_info_export;
    

  4. Hive端查询导入结果

    1
    SELECT * FROM product_info_orc_export;