摘要:GaussDB(DWS)反对在雷同网络中,配置一个GaussDB(DWS)集群连贯到一个MRS集群,而后将数据从HDFS中的文件读取到GaussDB(DWS)。
MapReduce服务(MapReduce Service,简称MRS)是一个基于开源Hadoop生态环境而运行的大数据集群,对外提供大容量数据的存储和剖析能力,可解决用户的数据存储和解决需要。用户能够将海量业务数据,存储在MRS的剖析集群,即应用Hive/Spark组件保留。Hive/Spark的数据文件则保留在HDFS中。GaussDB(DWS)反对在雷同网络中,配置一个GaussDB(DWS)集群连贯到一个MRS集群,而后将数据从HDFS中的文件读取到GaussDB(DWS)。从MRS导入数据到集群的流程,大抵能够分为5个步骤:
第一步: MRS集群上的数据筹备
第二步:手动创立内部服务器
第三步:创立表面
第四步:执行数据导入
第五步:革除资源
1 MRS集群上的数据筹备
从MRS导入数据到GaussDB(DWS)集群之前,假如您曾经实现了以下筹备工作:
(1)已创立MRS集群。
(2)在MRS集群上创立了Hive/Spark ORC表,且表数据曾经存储到该表对应的HDFS门路上。
如果您曾经实现上述筹备,则能够跳过本章节。
为不便起见,咱们将以在MRS集群上创立Hive ORC表作为示例,实现上述筹备工作。在MRS集群上创立Spark ORC表的大抵流程和SQL语法,同Hive相似,在本文中不再开展形容。
1.1 数据文件
假如有数据文件product_info.txt,示例数据如下所示:
100,XHDK-A-1293-#fJ3,2017-09-01,A,2017 Autumn New Shirt Women,red,M,328,2017-09-04,715,good205,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 nice150,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 exquisite200,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 buy450,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 odor260,OCDA-G-2817-#bD3,2017-09-12,B,2017 autumn new woolen coat women,red,L,2004,2017-09-15,826,Very favorite clothes980,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 small98,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 effective200,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 wear300,HWEC-L-2531-#xP8,2017-09-23,A,2017 autumn new shoes women,brown,M,403,2017-09-26,607,good100,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 good110,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
1.2 在MRS集群上创立Hive ORC表
(1)创立了MRS集群。
(2)登录MRS集群的Hive客户端。
(a)登录Master节点
(b)执行以下命令切换用户
sudo su - omm
(c)执行以下命令切换到客户端目录
cd /opt/client
(d)执行以下命令配置环境变量
source bigdata_env
(e)如果以后集群已启用Kerberos认证,执行以下命令认证以后用户,以后用户须要具备创立Hive表的权限。配置领有对应权限的角色。为用户绑定对应角色。如果以后集群未启用Kerberos认证,则无需执行此命令,例如,kinit hiveuser。
kinit MRS集群用户
(f)执行以下命令启动Hive客户端
beeline
(3)在Hive中创立数据库demo,执行以下命令创立数据库:
CREATE DATABASE demo
(4)在数据库demo中新建了一个Hive TEXTFILE类型的表product_info,并将数据文件(product_info.txt)导入到该表对应的HDFS门路中,执行以下命令切换到demo数据库:
USE demo;
- 执行以下命令,创立表product_info,表字段依照数据文件中的数据进行定义:
DROP TABLE product_info; CREATE TABLE product_info ( product_price int not null, product_id char(30) not null, 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;
(5)在数据库demo中创立了一个Hive ORC表product_info_orc,执行以下命令,创立Hive ORC表product_info_orc,表字段与上一步创立的表product_info完全一致:
DROP TABLE product_info_orc; CREATE TABLE product_info_orc( product_price int not null, product_id char(30) not null, 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;
(6)将product_info表的数据插入到Hive ORC表product_info_orc中。
insert into product_info_orc select * from product_info;
查问表product_info_orc
select * from product_info_orc;
2 手动创立内部服务器
创立表面语法(CREATE FOREIGN TABLE (SQL on Hadoop or OBS))中,需指定一个与MRS数据源连贯相关联的内部服务器。
当您通过GaussDB(DWS)治理控制台创立MRS数据源连贯时,数据库管理员dbadmin会在默认数据库postgres中主动创立一个内部服务器。因而,如果您心愿在默认数据库postgres中创立表面读取MRS数据,能够跳过本章节。
如果您心愿应用普通用户在自定义数据库中创立表面读取MRS数据,必须先在自定义数据库中手动创立一个内部服务器。本章节将为您介绍,如何应用普通用户在自定义数据库中创立内部服务器。步骤如下:
第一步:请确保GaussDB(DWS)集群已创立MRS数据源连贯。
第二步:创立用户和数据库并授予表面权限
第三步:手动创立内部服务器
阐明:须要留神的是,当您不再须要从该MRS数据源读取数据时,通过GaussDB(DWS)治理控制台删除MRS数据源,仅会删除在默认数据库postgres中主动创立的内部服务器,手动创立的内部服务器须要您手动删除。
2.1 创立用户和数据库并授予表面权限
以下示例,是新建一个普通用户dbuser并创立一个数据库mydatabase,而后应用管理员用户授予dbuser表面权限。
(1)应用数据库管理员通过GaussDB(DWS)提供的数据库客户端连贯默认数据库postgres,例如,应用gsql客户端的用户通过如下语句连贯数据库,依据界面提醒输出明码。
gsql -d postgres -h 192.168.2.30 -U dbadmin -p 8000 -r
(2)新建一个普通用户,并用它创立一个数据库。新建一个具备创立数据库权限的用户dbuser:
CREATE USER dbuser WITH CREATEDB PASSWORD "Bigdata@123";
- 切换为新建的用户
SET ROLE dbuser PASSWORD "Bigdata@123";
- 执行以下命令创立数据库:
CREATE DATABASE mydatabase;
- 查询数据库:
SELECT * FROM pg_database;
- 返回后果中有mydatabase 的信息示意创立胜利。
(3)应用管理员用户给普通用户赋予创立内部服务器的权限和应用表面的权限。应用数据库管理员用户通过数据库客户端连贯新建的数据库。
- 例如,应用gsql客户端的用户能够间接应用如下语句切换为管理员用户去连贯新建的数据库,依据提醒输出用户明码。
\c mydatabase dbadmin;
- 阐明:留神,必须先应用管理员用户连贯到将要创立内部服务器和应用表面的数据库,再对普通用户进行受权。
- 默认只有系统管理员才能够创立内部服务器,普通用户须要受权才能够创立,执行以下命令受权:
GRANT ALL ON FOREIGN DATA WRAPPER hdfs_fdw TO dbuser;
- 其中FOREIGN DATA WRAPPER的名字只能是hdfs_fdw,dbuser为创立SERVER的用户名。执行以下命令赋予用户应用表面的权限。
ALTER USER dbuser USEFT;
- 查看用户,返回后果中,dbuser的信息中蕴含了UseFT权限,示意受权胜利:
select r.rolname, r.rolsuper, r.rolinherit, r.rolcreaterole, r.rolcreatedb, r.rolcanlogin, r.rolconnlimit, r.rolvalidbegin, r.rolvaliduntil, array( select b.rolname from pg_catalog.pg_auth_members m join pg_catalog.pg_roles b on (m.roleid = b.oid) where m.member = r.oid ) as memberof, r.rolreplication, r.rolauditadmin, r.rolsystemadmin, r.roluseftfrom pg_catalog.pg_roles rorder by 1;
2.2 手动创立内部服务器
(1)应用数据库管理员通过GaussDB(DWS)提供的数据库客户端连贯默认数据库postgres。例如:通过gsql客户端登录数据库的用户能够应用以下两种办法中的一种进行连贯:
- (a)如果曾经登录了gsql客户端,能够执行以下命令切换数据库和用户,依据提醒输出明码:
c postgres dbadmin;
- (b)如果尚未登录gsql客户端,或者曾经登录了gsql客户端执行q退出gsql后,执行以下命令从新进行连贯,依据提醒输出明码:
gsql -d postgres -h 192.168.2.30 -U dbadmin -p 8000 -r
(2)执行以下命令查问主动创立的内部服务器的信息。
SELECT * FROM pg_foreign_server;
- 查问后果中,每一行代表一个内部服务器的信息。与MRS数据源连贯相关联的内部服务器蕴含以下信息:
- (a)srvname值蕴含“hdfs_server”字样以及MRS集群的ID,此ID与MRS治理控制台的集群列表MRS ID雷同。
- (b)srvoptions字段中的address参数为MRS集群的主备节点的IP地址及端口。
- 您能够根据上述信息找到您所要的内部服务器,并记录下它的srvname和srvoptions的值。
(3)切换为行将创立内部服务器的用户去连贯其对应的数据库。在本示例中,执行以下命令,应用创立用户和数据库并授予表面权限中创立的普通用户dbuser连贯其创立的数据库mydatabase 。
c mydatabase dbuser;
(4)创立内部服务器,创立内部服务器的具体语法,请参见CREATE SERVER。示例如下:
CREATE SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca FOREIGN DATA WRAPPER HDFS_FDW OPTIONS ( address '192.168.1.245:25000,192.168.1.218:25000', hdfscfgpath '/MRS/8f79ada0-d998-4026-9020-80d6de2692ca', type 'hdfs' );
(5) 查看内部服务器,返回后果如下所示,示意曾经创立胜利:
SELECT * FROM pg_foreign_server WHERE srvname='hdfs_server_8f79ada0_d998_4026_9020_80d6de26
3 创立表面
在GaussDB(DWS)数据库中创立一个Hadoop表面,用来拜访存储在MRS HDFS文件系统上的Hadoop结构化数据。Hadoop表面是只读的,只能用于查问操作,可间接应用SELECT查问其数据,您能够依照以下步骤创立表面:
第一步: 请确保您曾经实现前提条件
第二步:依据创立表面(CREATE FOREIGN TABLE (SQL on Hadoop or OBS))的语法形容,须要先获取以下信息:
第三步:获取MRS数据源的HDFS门路
第四步:获取MRS数据源连贯的内部服务器信息
第五步:创立表面
3.1 前提条件
- 已创立MRS集群,并将数据导入Hive/Spark数据库中的ORC表。
- GaussDB(DWS)集群已创立MRS数据源连贯。
3.2 获取MRS数据源的HDFS门路
有两种办法能够查看:
- 办法一:
- 对于Hive数据,能够登录MRS的Hive客户端,执行以下命令查看表的详细信息,并记录下location参数中的数据存储门路。
use <database_name>;desc formatted <table_name>;
- 例如,返回后果中location参数值为“hdfs://hacluster/user/hive/warehouse/demo.db/product_info_orc/”,则记录HDFS门路为“/user/hive/warehouse/demo.db/product_info_orc/”。
- 办法二:
- 按以下步骤获取HDFS门路。
- (a)登录MRS治理控制台。
- (b)抉择“集群列表 > 现有集群”,单击要查看的集群名称,进入集群根本信息页面。
- (c)单击“文件治理”,抉择“HDFS文件列表”。
- (d)进入您要导入到GaussDB(DWS)集群的数据的存储目录,并记录其门路。
3.3 获取MRS数据源连贯的内部服务器信息
(1)应用创立内部服务器的用户去连贯其对应的数据库。
- 是否应用普通用户在自定义数据库中创立表面,请依据需要进行抉择:
- 场景一:是
- (a)请先确保,您已依照手动创立内部服务器章节中的步骤,创立了普通用户dbuser和它的数据库mydatabase,并在mydatabase中手动创立了一个内部服务器。
- (b)应用用户dbuser通过GaussDB(DWS)提供的数据库客户端连贯数据库mydatabase。
- (c)如果曾经应用gsql客户端连贯至数据库,能够间接执行如下命令进行用户和数据库切换,依据界面提醒输出明码:
c mydatabase dbuser;
- 场景二:否
- 当您通过GaussDB(DWS)治理控制台创立MRS数据源连贯时,数据库管理员dbadmin会在默认数据库postgres中主动创立一个内部服务器。因而,如果应用数据库管理员dbadmin在默认数据库postgres中创立表面,须要通过GaussDB(DWS)提供的数据库客户端工具连贯数据库。例如,应用gsql客户端的用户通过如下命令连贯数据库,依据界面提醒输出明码:
gsql -d postgres -h 192.168.2.30 -U dbadmin -p 8000 -r
(2)执行以下命令,查看已创立的MRS数据源连贯的内部服务器信息。
SELECT * FROM pg_foreign_server;
- 查问后果中,每一行代表一个内部服务器的信息。与MRS数据源连贯相关联的内部服务器蕴含以下信息:
- o srvname值蕴含“hdfs_server”字样以及MRS集群的ID,此ID与MRS治理控制台的集群列表MRS ID雷同。
- o srvoptions字段中的address参数为MRS集群的主备节点的IP地址及端口。
- 您能够根据上述信息找到您所要的内部服务器,并记录下它的srvname和srvoptions的值。
3.4 创立表面
当实现获取MRS数据源连贯的内部服务器信息和获取MRS数据源的HDFS门路后,就能够创立一个表面,用于读取MRS数据源数据。
创立表面的语法格局如下。
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name [ { [CONSTRAINT constraint_name] NULL | [CONSTRAINT constraint_name] NOT NULL | column_constraint [...]} ] | table_constraint [, ...]} [, ...] ] ) SERVER dfs_server OPTIONS ( { option_name ' value ' } [, ...] ) DISTRIBUTE BY {ROUNDROBIN | REPLICATION} [ PARTITION BY ( column_name ) [ AUTOMAPPED ] ] ;
依据以上信息,创立表面命令如下所示:
DROP FOREIGN TABLE IF EXISTS foreign_product_info;CREATE FOREIGN TABLE foreign_product_info( product_price integer not null, product_id char(30) not null, 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 hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca OPTIONS (format 'orc', encoding 'utf8',foldername '/user/hive/warehouse/demo.db/product_info_orc/') DISTRIBUTE BY ROUNDROBIN;
4 执行数据导入
4.1 间接查问表面查看MRS数据源的数据
如果数据量较少,可间接应用SELECT查问表面,即可查看到MRS数据源的数据,执行以下命令,则能够从表面查问数据。
SELECT * FROM foreign_product_info;
查问结果显示如数据文件中所示的数据,示意导入胜利。查问后果的结尾将显示以下信息:(20 rows),通过表面查问到数据后,用户能够将数据插入数据库的一般表。
4.2 导入数据后查问数据
(1) 在GaussDB(DWS)数据库中,创立导入数据的指标表,用于存储导入的数据。该表的表构造必须与创立表面中创立的表面的表构造保持一致,即字段个数、字段类型要完全一致。
例如,创立一个名为product_info的表,示例如下:
DROP TABLE IF EXISTS product_info;CREATE TABLE product_info( product_price integer not null, product_id char(30) not null, 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);
(2)执行“INSERT INTO .. SELECT ..”命令从表面导入数据到指标表,示例:
INSERT INTO product_info SELECT * FROM foreign_product_info;
若呈现以下相似信息,阐明数据导入胜利。
INSERT 0 20
(3)执行SELECT命令,查看从MRS导入到GaussDB(DWS)中的数据。
SELECT * FROM product_info;
查问结果显示如数据文件中所示的数据,示意导入胜利。查问后果的结尾将显示以下信息:
(20 rows)
5 革除资源
当实现本教程的示例后,如果您不再须要应用本示例中创立的资源,您能够删除这些资源,免得资源节约或占用您的配额。
5.1 删除表面和指标表
(1)(可选)如果执行了导入数据后查问数据,请执行以下命令,删除指标表。
DROP TABLE product_info;
(2)执行以下命令,删除表面。
DROP FOREIGN TABLE foreign_product_info;
5.2 删除手动创立的内部服务器
如果执行了手动创立内部服务器,请依照以下步骤删除内部服务器、数据库和用户。
(1)应用创立内部服务器的用户通过GaussDB(DWS)提供的数据库客户端连贯到内部服务器所在的数据库。例如,应用gsql客户端的用户能够通过以下两种办法中的一种进行连贯:
- (a)如果曾经登录了gsql客户端,能够执行以下命令进行切换:
c mydatabase dbuser;
- (b)如果曾经登录了gsql客户端,您也能够执行q退出gsql后,再执行以下命令从新进行连贯:
gsql -d mydatabase -h 192.168.2.30 -U dbuser -p 8000 -r
(2)删除手动创立的内部服务器。执行以下命令进行删除,具体语法请参见DROP SERVER:
DROP SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca;
- 返回以下信息示意删除胜利:
DROP SERVER
- 查看内部服务器:
SELECT * FROM pg_foreign_server WHERE srvname='hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca';
- 返回后果如下所示,示意曾经删除胜利:
srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions ---------+----------+--------+---------+------------+--------+------------ (0 rows)
5.3 删除自定义数据库。
通过GaussDB(DWS)提供的数据库客户端连贯默认数据库postgres。如果曾经登录了gsql客户端,能够间接执行如下命令进行切换:
c postgres
执行以下命令,删除自定义数据库:
DROP DATABASE mydatabase;
返回以下信息示意删除胜利:
DROP DATABASE
5.4 应用管理员用户,删除本示例中创立的普通用户。
应用数据库管理员用户通过GaussDB(DWS)提供的数据库客户端连贯数据库。如果曾经登录了gsql客户端,能够间接执行如下命令进行切换:
c postgres dbadmin
执行以下命令回收创立内部服务器的权限:
REVOKE ALL ON FOREIGN DATA WRAPPER hdfs_fdw FROM dbuser;
其中FOREIGN DATA WRAPPER的名字只能是hdfs_fdw,dbuser为创立SERVER的用户名,执行以下命令删除用户:
DROP USER dbuser;
可应用du命令查问用户,确认用户是否曾经删除。
本文分享自华为云社区《GaussDB for DWS数据交融系列第三期:MRS数据导入DWS》,原文作者:西游故事多 。
点击关注,第一工夫理解华为云陈腐技术~