
# 从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对象存储服务中读取数据。
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002370501381.png "点击放大")
- **了解更多MRS** ，请参见[MRS文档](https://support.huaweicloud.com/mrs/index.html)。
- **了解更多Foreign Server语法** ，请参见[CREATE SERVER](https://support.huaweicloud.com/sqlreference-dws/dws_06_0175.html)。
- **了解更多Foreign Table语法** ，请参见[CREATE FOREIGN TABLE (SQL on OBS or Hadoop)](https://support.huaweicloud.com/sqlreference-dws/dws_06_0161.html)。
本实践预计时长：1小时，**基本流程**如下：
1. [步骤一：购买MRS集群并准备MRS的ORC表数据源]，创建MRS分析集群，通过将本地txt数据文件上传至OBS桶，再通过OBS桶导入Hive，并由txt存储表导入ORC存储表。
2. [步骤二：创建MRS数据源连接]，在DWS控制台创建MRS数据源，系统默认生成名称为mrs的外部服务器Foreign Server。
3. [步骤三：创建外表]：创建HDFS外表，用于访问MRS端的数据。
4. [步骤四：执行数据导入]：通过HDFS外表导入DWS本地表。
#### 视频介绍
<video controls="controls" preload="none" id="object6730625175712" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/dws-video/1627809922289086600.mp4" title="导入MRS数据源" poster="https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002402513457.png" height="308.0000" width="600.0000"></video>
#### 准备环境
已创建DWS集群，需确保MRS和DWS集群在同一个区域、可用区、同一VPC子网内，确保集群网络互通。
 #### 步骤一：购买MRS集群并准备MRS的ORC表数据源
1. 购买一个MRS分析集群。**关键参数** 按[表1]配置，其他未提及参数请使用默认值或参见[购买MRS集群](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0030.html)配置。
   
   集群创建约15分钟，可继续进行下面操作。
    表1MRS集群关键参数 
   | 关键参数       | 取值                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|
   | 区域         | **华北-北京四**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 计费模式       | **按需计费**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 集群类型       | **分析集群**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 版本类型       | **普通版**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 集群版本       | **MRS 1.9.2**（主推） 注意： - DWS 8.1.1.300及以上版本集群，支持连接1.6.*\*、1.7.* \*、1.8.*\*、1.9.\*、2.0.*\*、3.0.\*、3.1.\*及以上版本（"\*"代表的是数字）的MRS集群。  - DWS 8.1.1.300以下版本集群，支持连接1.6.*\*、1.7.* \*、1.8.*\*、1.9.\*、2.0.*\*版本（"\*"代表的是数字）的MRS集群。   |
   | 元数据        | **本地元数据**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 可用区        | **可用区1**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | CPU架构      | **x86**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | Kerberos认证 | **关闭**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 登录方式       | **密码**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      
   
   
2. 本地PC新建一个**product_info.txt** ，并拷贝以下数据，保存到本地。
   
   ```
   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
   ```
   
   
3. 登录[OBS控制台](https://console.huaweicloud.com/obs)，单击"创建桶"，填写以下**关键** **参数** ，其它参数默认即可，单击"立即创建"。
   
   表2桶参数 
   | 参数项      | 取值                 |
   |:---|:---|
   | 区域       | **华北-北京四**         |
   | 数据冗余存储策略 | **单AZ存储**          |
   | 桶名称      | **mrs-datasource** |
   | 默认存储类别   | **标准存储**           |
   | 桶策略      | **私有**             |
   | 默认加密     | **关闭**             |
   | 归档数据直读   | **关闭**             |
   | 标签       | -                  |
      
   
   
4. 等待桶创建好，单击桶名称，选择"对象 \> 上传对象"，将product_info.txt上传至OBS桶。
5. 切换回[MRS控制台](https://console.huaweicloud.com/mrs/#/clusterList/existing)，单击创建好的MRS集群名称，进入"概览"，单击"IAM用户同步"所在行的"同步"，等待约1分钟同步完成。
6. 单击"节点管理"，单击任意一台master节点，进入该节点页面，切换到"弹性公网IP"，单击"绑定弹性公网IP"，勾选已有弹性IP并单击"确定"，如果没有，请创建。记录此公网IP。
7. 确认主master节点。 
   1. 使用SSH工具以root用户登录以上节点，切换到omm用户。 **su - omm**
      
   
   2. 执行以下命令查询主master节点。 **sh ${BIGDATA_HOME}/om-0.0.1/sbin/status-oms.sh**
      回显信息中"HAActive"参数值为"active"的节点为主master节点。
      - 如果当前登录节点是主节点，则执行[9]。
      
      - 如果当前登录节点不是主节点，则执行[8]。
       
   
   
   
   
8. 重新退出，再以root用户登录主节点，并切换到omm用户。
   
   **su - omm**
   
   
9. 执行以下步骤进入Hive客户端所在目录。
   
   **cd /opt/client**
   
   
10. 在Hive上创建存储类型为TEXTFILE的表product_info。 
    1. 在/opt/client路径下，导入环境变量。 **source bigdata_env**
       
    
    2. 登录Hive客户端。 **beeline**
       
    
    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 TEXTFILE;
       ```
       
    
    
    
    
11. 将product_info.txt数据文件导入Hive。 
    1. 切回到MRS集群，单击"文件管理"，单击"导入数据"。
       - OBS路径：选择上面创建好的OBS桶名，找到product_info.txt文件，单击"是"。
       
       - HDFS路径：选择/user/hive/warehouse/demo.db/product_info/，单击"是"。
        
    
    
    
    2. 单击"确定"，等待导入成功，此时product_info的表数据已导入成功。
    
    
    
    
12. 创建ORC表，并将数据导入ORC表。 
    1. 回到已连接Hive客户端的SQL界面，执行以下SQL语句创建ORC表。
       ```
       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;
       ```
       
    
    2. 将product_info表的数据插入到Hive ORC表product_info_orc中。
       ```
       INSERT INTO product_info_orc SELECT * FROM product_info;
       ```
       
    
    3. 查询ORC表数据导入成功。
       ```
       SELECT * FROM product_info_orc;
       ```
       
    
    
    
    
 
 #### 步骤二：创建MRS数据源连接
1. 登录[DWS控制台](https://console.huaweicloud.com/dws)，左侧选择"集群 \> 集群列表"，单击已创建好的DWS集群，**确保DWS集群与MRS在同一个区域、可用分区，并且在同一VPC子网下。**
2. 上方导航选择"数据源 \> MRS数据源"，单击"创建MRS数据源连接"。
3. 填写如下**关键参数** ，其它参数默认即可，单击"确认"。
   
   表3创建MRS数据源 
   | 参数项    | 取值                           |
   |:---|:---|
   | 数据源名称  | **mrs**                      |
   | 配置方式   | **MRS用户**                    |
   | MRS数据源 | **选择前序步骤创建名称为"mrs_01"的数据源。** |
   | MRS用户  | **admin**                    |
   | 用户密码   | **用户自定义的密码**。                |
   | 数据库    | **gaussdb**                  |
      
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002370381517.png "点击放大")
   
   
   
 
 #### 步骤三：创建外表
1. 连接已创建好的DWS集群。
2. 查看系统中的外部服务器。 
   ```
   SELECT * FROM pg_foreign_server;
   ```
   从查询结果得知，创建完MRS数据源后，系统自动生成一个名称为mrs的外部服务器。
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002336583186.png "点击放大")
   
   
3. 获取Hive的product_info_orc的文件路径。
   
   1. 登录[MRS控制台](https://console.huaweicloud.com/mrs/#/clusterList/existing)。
   
   2. 选择"集群列表 \> 现有集群"，单击要查看的集群名称，进入集群基本信息页面。
   
   3. 单击"文件管理"，选择"HDFS文件列表"。
   
   4. 进入您要导入到DWS集群的数据的存储目录，并记录其路径。
      图1在MRS上查看数据存储路径   
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001158657383.png "点击放大") 
   
   
   
   
4. 创建外表，SERVER填写[步骤二：创建MRS数据源连接]创建的MRS数据源的名称，本实践为mrs，foldername填写[3]查到的路径。
   
   ```
   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. 创建本地目标表。 
   ```
   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);
   ```
   
   
2. 从外表导入目标表。 
   ```
   INSERT INTO product_info SELECT * FROM foreign_product_info;
   ```
   
   
3. 查询导入结果。 
   ```
   SELECT * FROM product_info;
   ```
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002369855713.png "点击放大")
   
   
