赞
踩
本文分享自华为云社区《对接HiveMetaStore,拥抱开源大数据》,作者:睡觉是大事。
在大数据融合分析时代,面对海量的数据以及各种复杂的查询,性能是我们使用一款数据处理引擎最重要的考量。而GaussDB(DWS)服务有着强大的计算引擎,其计算性能优于MRS服务中的hive或者spark这类计算引擎,且可以以更低的成本满足业务高弹性和敏捷性需求。通过与MRS联动,无需搬迁数据,利用DWS的高性能计算引擎处理和分析数据湖中的海量数据以及各种复杂的查询业务、分析业务越来越成为主流的解决方案。
我们可以通过创建external schema的方式来对接HiveMetaStore元数据服务,从而实现GaussDB(DWS)直接查询hive/spark表或者插入数据到hive/spark表。无需创建读外表或者写外表,也无需担心hive/spark表的定义发生变化时GaussDB(DWS)没有及时更新表定义。
本文章主要描述了GaussDB(DWS)与hivememtastore对接配置与指导。
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表的元数据。
除了存储在pg_namespace中的相关信息外,external schema连接相关的配置信息都会记录在pg_external_namespace中。
GaussDB(DWS)对接HiveMetaStore流程如下图所示
1.创建Server,external schema,sql query查询。
对于创建OBS server有两种方式,一种是通过永久AK、SK的方式创建。(此种方式前提是可以获取永久AK、SK,但是此种方式不安全,AK/SK直接暴露在配置文件中,并且创建服务的时候需要明文输入AK、SK,不建议采用此种方式创建服务)
另一种云上DWS绑定ECS委托方式访问OBS,通过管控面创建OBS server。委托通过管控面创建server可参考创建外表时如何创建OBS server。管理OBS数据源_数据仓库服务 GaussDB(DWS)_集群管理指南_管理数据源
external schema创建语法为
- CREATE External Schema ex
- WITH SOURCE hive
- DATABASE 'default'
- SERVER hdfs_server
- METAADDRESS '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。
2.语法解析:语法解析层主要针对进行解析,主要负责以下内容:
3.元数据查询:从HMS中查询元数据信息,该步骤在步骤1中完成。
从HMS中读取数据,主要包括列信息,分区信息、分区键信息、分隔符信息等。
4.数据查询(针对select):从DFS存储中获取统计信息文件个数和文件大小,为plan生成提供依据。
5.查询重写、查询优化、查询执行
6.查询下发:将元数据随plan下发给DN,DN收到plan以后,会将元数据进行解码后插入到SysCache中。
7.查询执行:DN访问obs对应文件,执行查询。
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表
执行以下语句,创建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在传输过程中泄漏。
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)
创建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)
- 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 ex1.product_info SELECT * FROM product_info_export;
导入数据
INSERT INTO product_info_orc_export SELECT * FROM ex1.product_info;
本文主要对GaussDB(DWS)对接hiveMetaStore的原理和方式做了阐述。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。