本文分享自华为云社区《对接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 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。

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的原理和方式做了阐述。

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

对接HiveMetaStore,拥抱开源大数据的更多相关文章

  1. 开源大数据技术专场(下午):Databircks、Intel、阿里、梨视频的技术实践

    摘要: 本论坛第一次聚集阿里Hadoop.Spark.Hbase.Jtorm各领域的技术专家,讲述Hadoop生态的过去现在未来及阿里在Hadoop大生态领域的实践与探索. 开源大数据技术专场下午场在 ...

  2. 开源大数据技术专场(上午):Spark、HBase、JStorm应用与实践

    16日上午9点,2016云栖大会“开源大数据技术专场” (全天)在阿里云技术专家封神的主持下开启.通过封神了解到,在上午的专场中,阿里云高级技术专家无谓.阿里云技术专家封神.阿里巴巴中间件技术部高级技 ...

  3. 开源大数据生态下的 Flink 应用实践

    过去十年,面向整个数字时代的关键技术接踵而至,从被人们接受,到开始步入应用.大数据与计算作为时代的关键词已被广泛认知,算力的重要性日渐凸显并发展成为企业新的增长点.Apache Flink(以下简称 ...

  4. TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台

    本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...

  5. 开源大数据引擎:Greenplum 数据库架构分析

    Greenplum 数据库是最先进的分布式开源数据库技术,主要用来处理大规模的数据分析任务,包括数据仓库.商务智能(OLAP)和数据挖掘等.自2015年10月正式开源以来,受到国内外业内人士的广泛关注 ...

  6. [Hadoop 周边] Hadoop和大数据:60款顶级大数据开源工具(2015-10-27)【转】

    说到处理大数据的工具,普通的开源解决方案(尤其是Apache Hadoop)堪称中流砥柱.弗雷斯特调研公司的分析师Mike Gualtieri最近预测,在接下来几年,“100%的大公司”会采用Hado ...

  7. Hadoop和大数据:60款顶级大数据开源工具

    一.Hadoop相关工具 1. Hadoop Apache的Hadoop项目已几乎与大数据划上了等号.它不断壮大起来,已成为一个完整的生态系统,众多开源工具面向高度扩展的分布式计算. 支持的操作系统: ...

  8. 【转载】Hadoop和大数据:60款顶级大数据开源工具

    一.Hadoop相关工具 1. Hadoop Apache的Hadoop项目已几乎与大数据划上了等号.它不断壮大起来,已成为一个完整的生态系统,众多开源工具面向高度扩展的分布式计算. 支持的操作系统: ...

  9. 大数据与 AI 生态中的开源技术总结

    本文由云+社区发表 作者:堵俊平 在数据爆炸与智能革命的新时代,新的平台与应用层出不穷,开源项目推动了前沿技术和业界生态快速发展.本次分享将以技术和生态两大视角来看大数据和人工智能技术的发展,通过分析 ...

  10. Hadoop和大数据:60款顶级开源工具(山东数漫江湖)

    说到处理大数据的工具,普通的开源解决方案(尤其是Apache Hadoop)堪称中流砥柱.弗雷斯特调研公司的分析师Mike Gualtieri最近预测,在接下来几年,“100%的大公司”会采用Hado ...

随机推荐

  1. springMVC+JDBC:分页示例

    文章来源:http://liuzidong.iteye.com/blog/1067492 一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5 二 工程相关图片: ...

  2. 前后端分离Ajax入门

    前后端分离之Ajax入门 一.概念 Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信 ...

  3. leetcode 春季比赛3题 二叉搜索树染色

    其实和二叉搜索树一点关系都没有. 每个点的颜色只取决于最后一次包含该点的操作.用 set 维护所有颜色待确定的点,倒序处理询问,每次利用 lower_bound 方法从 set 中取出所有在询问范围内 ...

  4. Leetcode 招商银行-03. 点燃木棒

    用广度优先,暴力搜索.代码如下 import java.util.*; class Solution { public static void main(String[] args) { Soluti ...

  5. 让艺术触手可及!3DCAT实时云渲染赋能真浪数字艺术馆首展

    2023年5月18日,由真浪数字艺术和EZVR联合打造的真浪数字艺术馆首展–「破界·交织」让艺术更自由,正式与大家相见.此次展览分为五个主题展馆,汇聚了来自全球各领域的19位青年数字艺术家一同探讨虚实 ...

  6. golang 运行时死锁排查和检测

    当运行的系统发生goroutine等待获取锁时间超过预期时,判定为发生了死锁.因目前代码中使用了一些公开的锁实例,调用链也比较长,对问题排查带来了很大困扰.为了便于问题排查,需要借助工具来实现. 1. ...

  7. Cesium之原生控件

    1. 控件概述 Cesium的开始,基本上是从new一个Viewer开始 // ... <div id="cesiumContainer"></div> & ...

  8. Python glob库的用法

    一.匹配指定文件夹下的所有文件 files = glob.glob("C:\\Users\\liuchunlin2\\Desktop\\测试数据\\*") print(files) ...

  9. ARM和x86比较

    信不信,随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是如果你再问他知道ARM和X86架构么?这两者的区别又是什么?绝大多数的人肯定是一脸懵逼.今天小编就带你深入了解CPU的这两大架 ...

  10. C# OpenCv DNN 人脸检测

    using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using Syst ...