更新时间: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。
- 不再保证事务原子性,事务失败后,不再保证数据一致性;不支持回滚。
- 不支持通过EXTERNAL SCHEMA对hive端创建的表进行GRANT和REVOKE操作。
- 并发支持:DWS、HIVE、SPARK并发读写,会出现脏读问题;对同一张非分区表或者同一张分区表的同一个分区执行包含INSERT OVERWRITE相关的并发操作无法保证预期结果,请不要执行此类操作。
- Hive Metastore特性不支持联邦机制。
基本流程
- 在Hive端创建表。
- 在Hive端插入数据或者通过将本地txt数据文件上传至OBS桶,再通过OBS桶导入Hive,并由txt存储表导入ORC存储表。
- 创建MRS数据源连接。
- 创建外部服务器。
- 创建EXTERNAL SCHEMA。
- 通过EXTERNAL SCHEMA对Hive表进行导入或者读取操作。
准备MRS的ORC表数据源
- 本地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
- 登录OBS控制台,单击“创建并行文件系统”,填写以下参数,单击“立即创建”,等待并行文件系统创建好。
表2 桶参数 参数项
取值
区域
根据实际环境选择区域。
数据冗余存储策略
单AZ存储
桶名称
mrs-datasource
默认存储类别
标准存储
桶策略
私有
默认加密
关闭
归档数据直读
关闭
企业项目
default
标签
-
- 切换回MRS控制台,单击创建好的MRS集群名称,进入“概览”,单击“IAM用户同步”所在行的“同步”,等待约5分钟同步完成。
- 单击“节点管理”,单击任意一台master节点,进入该节点页面,切换到“弹性公网IP”,单击“绑定弹性公网IP”,勾选已有弹性IP并单击“确定”,如果没有,请创建。记录此公网IP。
- (可选)Hive对接OBS。
Hive对接OBS场景下执行该步骤,对接HDFS场景请跳过。
- 回到MRS集群页面,单击集群名称进入“概览”,单击“前往Manager”,如果提示绑定公网IP,请先绑定公网IP。
- 如果弹出访问MRS Manager对话框,单击“确定”,页面会跳转到MRS登录页面。输入MRS Manager的用户名admin和密码,密码为创建MRS集群时输入的admin密码。
- 参见Hive对接OBS文件系统完成Hive对接OBS的操作。
- 下载客户端。
- 使用root用户登录主master节点,并更新主管理节点的客户端配置。
cd /opt/client
sh refreshConfig.sh /opt/client 客户端配置文件压缩包完整路径
本例命令为:
sh refreshConfig.sh /opt/client /tmp/MRS-client/MRS_Services_Client.tar
- 切换到omm用户,并进入Hive客户端所在目录。
su - omm
cd /opt/client
- 在Hive上创建存储类型为TEXTFILE的表product_info。
- 在/opt/client路径下,导入环境变量。
提示:若出现find:'opt/client/Hudi': Permission denied 可忽略,不影响后续操作。
- 登录Hive客户端。
- 依次执行以下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;
- 在/opt/client路径下,导入环境变量。
- 将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服务用户指南》中的管理数据文件章节。
- 创建ORC表,并将数据导入ORC表。
- 执行以下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;
- 将product_info表的数据插入到Hive ORC表product_info_orc中。
1
insert into product_info_orc select * from product_info;
- 查询ORC表数据导入成功。
1
select * from product_info_orc;
- 执行以下SQL语句创建ORC表。
创建MRS数据源连接
- 登录DWS控制台,单击已创建好的DWS集群,确保DWS集群与MRS在同一个区域、可用分区,并且在同一VPC子网下。
- 切换到“MRS数据源”,单击“创建MRS数据源连接”。
- 配置以下参数,单击“确认”。
- 数据源名称:mrs_server
- 配置方式:MRS用户
- MRS数据源:选择前面创建的mrs_01集群。
- MRS用户:admin
- 用户密码:前面创建MRS数据源的admin密码。
创建外部服务器
仅Hive对接OBS场景执行,Hive对接HDFS场景跳过。
- 使用Data Studio连接已创建好的DWS集群。
- 执行以下语句,创建外部服务器。
认证用的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' );
- 查看外部服务器。
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
- 获取Hive的metastore服务内网IP和端口以及要访问的Hive端数据库名称。
- 登录MRS控制台。
- 选择“集群列表 > 现有集群”,单击要查看的集群名称,进入集群基本信息页面。
- 单击运维管理处的“前往manager”,并输入用户名和密码登录管理页面。
- 依次单击“集群”、“Hive”、“配置”、“全部配置”、“MetaStore”、“端口”,记录参数hive.metastore.port对应的值。
- 依次单击“集群”、“Hive”、“实例”,记录MetaStore对应主机名称包含master1的管理IP。
- 创建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_server,METAADDRESS填写中记录的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
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 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) ) ;
- 从Hive表导入目标表。
1
INSERT INTO product_info SELECT * FROM ex1.product_info_orc;
- 查询导入结果。
1
SELECT * FROM product_info;
执行数据导出
- 创建本地源表。
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;
- 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;
- 从本地源表导入Hive表。
1
INSERT INTO ex1.product_info_orc_export SELECT * FROM product_info_export;
- Hive端查询导入结果
1
SELECT * FROM product_info_orc_export;
父主题: 导入数据