从MRS Hive导入表数据到DWS集群
本实践通过建立HDFS外表实现DWS远端访问或读取MRS数据源。其实现原理是DWS通过外部服务器(Foreign Server)、外表(Foreign Table)进行数据传输,实践过程主要模拟将MRS Hive中存储的ORC格式的表数据,通过创建跨源Foreign Server和Foreign Table,实现数据从Hive写入DWS的过程。
外部服务器是数据库中配置的一个虚拟对象,用于定义连接到外部数据源的参数(如地址、协议、认证信息等)。通过外部服务器,本地数据库可以直接查询、插入外部数据,就像操作本地表一样(语法类似,但可能受性能或功能限制)。
外表是数据库中的一种虚拟表,其数据实际存储在数据库系统之外(如文件系统、其他数据库、云存储等),但通过表结构(元数据)的定义和访问接口,使得用户可以直接用标准 SQL 查询这些外部数据,无需将其导入数据库。
基于对接的数据源类型,DWS外表可分为HDFS外表和OBS外表两类,分别支持从HDFS分布式文件系统和OBS对象存储服务中读取数据。
- 了解更多MRS,请参见MRS文档。
- 了解更多Foreign Server语法,请参见CREATE SERVER。
- 了解更多Foreign Table语法,请参见CREATE FOREIGN TABLE (SQL on OBS or Hadoop)。
本实践预计时长:1小时,基本流程如下:
- 步骤一:购买MRS集群并准备MRS的ORC表数据源,创建MRS分析集群,通过将本地txt数据文件上传至OBS桶,再通过OBS桶导入Hive,并由txt存储表导入ORC存储表。
- 步骤二:创建MRS数据源连接,在DWS控制台创建MRS数据源,系统默认生成名称为mrs的外部服务器Foreign Server。
- 步骤三:创建外表:创建HDFS外表,用于访问MRS端的数据。
- 步骤四:执行数据导入:通过HDFS外表导入DWS本地表。
视频介绍
准备环境
已创建DWS集群,需确保MRS和DWS集群在同一个区域、可用区、同一VPC子网内,确保集群网络互通。
步骤一:购买MRS集群并准备MRS的ORC表数据源
- 购买一个MRS分析集群。关键参数按表1配置,其他未提及参数请使用默认值或参见购买MRS集群配置。
集群创建约15分钟,可继续进行下面操作。
- 本地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
默认存储类别
标准存储
桶策略
私有
默认加密
关闭
归档数据直读
关闭
标签
-
- 等待桶创建好,单击桶名称,选择“对象 > 上传对象”,将product_info.txt上传至OBS桶。
- 切换回MRS控制台,单击创建好的MRS集群名称,进入“概览”,单击“IAM用户同步”所在行的“同步”,等待约1分钟同步完成。
- 单击“节点管理”,单击任意一台master节点,进入该节点页面,切换到“弹性公网IP”,单击“绑定弹性公网IP”,勾选已有弹性IP并单击“确定”,如果没有,请创建。记录此公网IP。
- 确认主master节点。
- 重新退出,再以root用户登录主节点,并切换到omm用户。
su - omm
- 执行以下步骤进入Hive客户端所在目录。
cd /opt/client
- 在Hive上创建存储类型为TEXTFILE的表product_info。
- 在/opt/client路径下,导入环境变量。
- 登录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;
- 将product_info.txt数据文件导入Hive。
- 切回到MRS集群,单击“文件管理”,单击“导入数据”。
- OBS路径:选择上面创建好的OBS桶名,找到product_info.txt文件,单击“是”。
- HDFS路径:选择/user/hive/warehouse/demo.db/product_info/,单击“是”。
- 单击“确定”,等待导入成功,此时product_info的表数据已导入成功。
- 切回到MRS集群,单击“文件管理”,单击“导入数据”。
- 创建ORC表,并将数据导入ORC表。
- 回到已连接Hive客户端的SQL界面,执行以下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;
- 回到已连接Hive客户端的SQL界面,执行以下SQL语句创建ORC表。
步骤二:创建MRS数据源连接
- 登录DWS控制台,左侧选择“专属集群 > 集群列表”,单击已创建好的DWS集群,确保DWS集群与MRS在同一个区域、可用分区,并且在同一VPC子网下。
- 左侧导航选择“数据源 > MRS数据源”,单击“创建MRS数据源连接”。
- 填写如下关键参数,其它参数默认即可,单击“确认”。
表3 创建MRS数据源 参数项
取值
数据源名称
mrs
配置方式
MRS用户
MRS数据源
选择前序步骤创建名为的“mrs_01”数据源。
MRS用户
admin
用户密码
用户自定义的密码。
数据库
gaussdb
步骤三:创建外表
- 连接已创建好的DWS集群。
- 查看系统中的外部服务器。
1
SELECT * FROM pg_foreign_server;
从查询结果得知,创建完MRS数据源后,系统自动生成一个名称为mrs的外部服务器。
- 获取Hive的product_info_orc的文件路径。
- 登录MRS控制台。
- 选择“集群列表 > 现有集群”,单击要查看的集群名称,进入集群基本信息页面。
- 单击“文件管理”,选择“HDFS文件列表”。
- 进入您要导入到DWS集群的数据的存储目录,并记录其路径。
图1 在MRS上查看数据存储路径
- 创建外表,foldername填写3查到的路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
DROP FOREIGN TABLE IF EXISTS foreign_product_info; CREATE FOREIGN TABLE foreign_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) ) SERVER mrs OPTIONS ( format 'orc', encoding 'utf8', foldername '/user/hive/warehouse/demo.db/product_info_orc/' ) DISTRIBUTE BY ROUNDROBIN;
步骤四:执行数据导入
- 创建本地目标表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
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) ) with ( orientation = column, compression=middle ) DISTRIBUTE BY HASH (product_id);
- 从外表导入目标表。
1
INSERT INTO product_info SELECT * FROM foreign_product_info;
- 查询导入结果。
1
SELECT * FROM product_info;