写点什么

对接 HiveMetaStore,拥抱开源大数据

  • 2024-04-24
    广东
  • 本文字数:4631 字

    阅读完需:约 15 分钟

对接HiveMetaStore,拥抱开源大数据

本文分享自华为云社区《对接HiveMetaStore,拥抱开源大数据》,作者:睡觉是大事。

1. 前言


  • 适用版本:9.1.0 及以上


在大数据融合分析时代,面对海量的数据以及各种复杂的查询,性能是我们使用一款数据处理引擎最重要的考量。而 GaussDB(DWS)服务有着强大的计算引擎,其计算性能优于 MRS 服务中的 hive 或者 spark 这类计算引擎,且可以以更低的成本满足业务高弹性和敏捷性需求。通过与 MRS 联动,无需搬迁数据,利用 DWS 的高性能计算引擎处理和分析数据湖中的海量数据以及各种复杂的查询业务、分析业务越来越成为主流的解决方案。


我们可以通过创建 external schema 的方式来对接 HiveMetaStore 元数据服务,从而实现 GaussDB(DWS)直接查询 hive/spark 表或者插入数据到 hive/spark 表。无需创建读外表或者写外表,也无需担心 hive/spark 表的定义发生变化时 GaussDB(DWS)没有及时更新表定义。


本文章主要描述了 GaussDB(DWS)与 hivememtastore 对接配置与指导。

2. 原理浅析

2.1 什么是 HiveMetaStore


HiveMeatStore 是 Apache Hive 的一个关键组件,它是一个元数据存储库,用于管理 hive/spark 表的元数据信息。HiveMeatStore 存储了 Hive 表的结构信息,包括表名、列名、数据类型、分区信息等。它还存储了表的位置信息,即表数据存储何处。HiveMeatStore 的主要作用是提供元数据服务,使得 Hive/Spark 可以对数据进行查询和分析。它还提供了一些 API,可以让开发人员通过编程方式访问表的元数据。总之,HiveMeatStore 是 Hive 的一个重要组件,它提供了元数据管理和查询服务。


external schema 即外部模式,GaussDB(DWS)通过创建 extrenal schema 来对接 HiveMeatStore 服务,每次查询主动获取 hive/spark 表对象的元数据。无需 GaussDB(DWS)内核通过 create foreign table 获取 hive/spark 表的元数据。

2.2 external schema 与 schema 的区别


1 external schema 主要用于与 HiveMeatStore 建立连接,获取表对象元数据,在创建 external schema 时需要指定连接的所需要的各个属性值。


2 普通 schema 在创建后会将 schema 的信息记录在 pg_namespace 中,external schema 创建后和普通 schema 一样也会记录在 pg_namespace,可以通过 pg_namespace 中的 nsptype 字段区分是 external schema 还是普通 schmea。



除了存储在 pg_namespace 中的相关信息外,external schema 连接相关的配置信息都会记录在 pg_external_namespace 中。



3 external schema 下不支持创建表对象。对象的创建是在 hive 或者 spark 中创建的,external schema 仅用于执行 DML 操作。

2.3 原理说明


GaussDB(DWS)对接 HiveMetaStore 流程如下图所示



1.创建 Server,external schema,sql query 查询。


用户在使用本特性前,将需要创建 Server,创建 Server 过程与已有 Server 创建过程相同


对于创建 OBS server 有两种方式,一种是通过永久 AK、SK 的方式创建。(此种方式前提是可以获取永久 AK、SK,但是此种方式不安全,AK/SK 直接暴露在配置文件中,并且创建服务的时候需要明文输入 AK、SK,不建议采用此种方式创建服务)


另一种云上 DWS 绑定 ECS 委托方式访问 OBS,通过管控面创建 OBS server。委托通过管控面创建 server 可参考创建外表时如何创建 OBS server。https://support.huaweicloud.com/mgtg-dws/dws_01_1602.html


创建 external schema:


external schema 创建语法为


CREATE External Schema ex WITH SOURCE hiveDATABASE 'default'SERVER hdfs_serverMETAADDRESS '10.254.159.121:9010'CONFIGURATION '/home/fengshuo/conf2';
复制代码


其中 SOURCE 字段指定了外部元数据存储引擎的类型,DATABASE 为 Hive 中对应的数据库名,SERVER 为步骤 1 中创建的 server,METAADDRESS 为 Hive 提供的地址端口信息,CONFIGURATION 为 Hive、Kerberos 相关配置文件路径。


external schema 的目标是对接外部元数据(Foreign Meta),使得 DWS 能主动感知外部元数据的变化,如下图所示。



GaussDB(DWS) 通过 external schema 对接 HiveMetaStore,映射到对应的外表元数据,再通过外表访问 Hadoop。


SQL 查询:select 查询形式为 select * from ex.tbl,其中 tbl 为外源表名,ex 为已创建的 external schema。


2.语法解析:语法解析层主要针对进行解析,主要负责以下内容:


当读取到 ex.tbl 表以后,连接 HMS 进行元数据查询


3.元数据查询:从 HMS 中查询元数据信息,该步骤在步骤 1 中完成。


从 HMS 中读取数据,主要包括列信息,分区信息、分区键信息、分隔符信息等。


4.数据查询(针对 select):从 DFS 存储中获取统计信息文件个数和文件大小,为 plan 生成提供依据。


5.查询重写、查询优化、查询执行


6.查询下发:将元数据随 plan 下发给 DN,DN 收到 plan 以后,会将元数据进行解码后插入到 SysCache 中。


7.查询执行:DN 访问 obs 对应文件,执行查询。

3. 与 hivememtastore 对接流程

3.1 准备环境


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


已获取 AK 和 SK。

3.2 在 hive 端创建需要对接的表


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


    source bigdata_env
复制代码


2、登录 Hive 客户端。


3、依次执行以下 SQL 语句创建 demo 数据库及目标表表 product_info。


CREATE DATABASE demo;
复制代码


use demo;
复制代码


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 orc;
复制代码


4、通过 insert 导入数据到 hive 表

3.3 创建外部服务器


使用 Data Studio 连接已创建好的 DWS 集群。


MRS 端有两种支持格式,hdfs 和 obs。hive 对接这两种场景的创建外部服务器的方式也有所不同

执行以下语句,创建 OBS 外部服务器。


CREATE SERVER obs_servevr FOREIGN DATA WRAPPER DFS_FDW OPTIONS (address 'obs.xxx.com:5443',   //OBS的访问地址。encrypt 'on',access_key '{AK值}',secret_access_key '{SK值}', type 'obs');
复制代码


执行以下语句,创建HDFS外部服务器。
复制代码


CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS (      TYPE 'hdfs',      ADDRESS '{主节点},{备节点}',      HDFSCFGPATH '{hdfs配置文件地址}');
复制代码


认证用的 AK 和 SK 硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。另外,dws 内部会对 sk 做加密处理,因此不用担心 sk 在传输过程中泄漏。


查看外部服务器(obs 为例)。


SELECT * FROM pg_foreign_server WHERE srvname='obs_server';
复制代码


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


                     srvname                      | srvowner | srvfdw | srvtype | srvversion | srvacl |                                                     srvoptions--------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- obs_server |    16476 |  14337 |         |            |        | {address=obs.xxx.com:5443,type=obs,encrypt=on,access_key=***,secret_access_key=***}(1 row)
复制代码

3.4 创建 EXTERNAL SCHEMA


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


登录 MRS 管理控制台。


选择“集群列表 > 现有集群”,单击要查看的集群名称,进入集群基本信息页面。


单击运维管理处的“前往 manager”,并输入用户名和密码登录 FI 管理页面。


依次单击“集群”、“Hive”、“配置”、“全部配置”、“MetaStore”、“端口”,记录参数 hive.metastore.port 对应的值。


依次单击“集群”、“Hive”、“实例”,记录 MetaStore 对应主机名称包含 master1 的管理 IP。


创建 EXTERNAL SCHEMA


//Hive对接OBS场景:SERVER名字填写2创建的外部服务器名称,DATABASE填写Hive端创建的数据库,METAADDRESS填写1中记录的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数据源连接创建的数据源名称mrs_server,METAADDRESS填写1中记录的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'
复制代码


查看创建的 EXTERNAL SCHEMA


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)
复制代码

3.5 执行数据导入 hive 表


创建本地数据源表,表结构与 hive 一致


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)                   ) ;
复制代码


导入数据


从本地源表导入 Hive 表。


INSERT INTO ex1.product_info SELECT * FROM product_info_export;
复制代码

3.6 执行数据从 hive 导入 dws 表


导入数据


从本地源表导入 Hive 表。


INSERT INTO product_info_orc_export SELECT * FROM ex1.product_info;
复制代码

4 总结


本文主要对 GaussDB(DWS)对接 hiveMetaStore 的原理和方式做了阐述。


点击关注,第一时间了解华为云新鲜技术~

发布于: 2024-04-24阅读数: 14
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
对接HiveMetaStore,拥抱开源大数据_大数据_华为云开发者联盟_InfoQ写作社区