
# 从DWS集群导出ORC数据到MRS集群
DWS数据库支持通过HDFS外表导出ORC格式数据至MRS，通过外表设置的导出模式、导出数据格式等信息来指定导出的数据文件，利用多DN并行的方式，将数据从DWS数据库导出到外部，存放在HDFS文件系统上，从而提高整体导出性能。
#### 准备环境
已创建DWS集群，需确保MRS和DWS集群在同一个区域、可用区、同一VPC子网内，确保集群网络互通。
#### 创建MRS分析集群
1. 登录[MRS控制台](https://console.huaweicloud.com/mrs/#/clusterList/existing)，单击"购买集群"，选择"自定义购买"，填写软件配置参数，单击"下一步"。
   
   表1软件配置 
   | 参数项  | 取值样例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   |:---|:---|
   | 区域   | 华北-北京四                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 集群名称 | mrs_01                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 集群版本 | **MRS 1.9.2**（主推） 说明： - 8.1.1.300及以上版本集群，MRS集群支持连接1.6.*\*、1.7.* \*、1.8.*\*、1.9.\*、2.0.*\*、3.0.\*、3.1.\*及以上版本（"\*"代表的是数字）。  - 8.1.1.300以下版本集群，MRS集群支持连接1.6.*\*、1.7.* \*、1.8.*\*、1.9.\*、2.0.*\*版本（"\*"代表的是数字）。   |
   | 集群类型 | 分析集群                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
      
   
   
2. 填写硬件配置参数，单击"下一步"。 
   表2硬件配置 
   | 参数项      | 取值样例       |
   |:---|:---|
   | 计费模式     | 按需计费       |
   | 可用区      | 可用区2       |
   | 虚拟私有云    | vpc-01     |
   | 子网       | subnet-01  |
   | 安全组      | 自动创建       |
   | 弹性公网IP   | *10.x.x.x* |
   | 企业项目     | default    |
   | Master节点 | 2          |
   | 分析Core节点 | 3          |
   | 分析Task节点 | 0          |
      
   
   
3. 填写高级配置参数如下表，单击"立即购买"，等待约15分钟，集群创建成功。 
   表3高级配置 
   | 参数项        | 取值样例                         |
   |:---|:---|
   | 标签         | test01                       |
   | 主机名前缀      | 可不填写，用作集群中ECS机器或BMS机器主机名的前缀。 |
   | 弹性伸缩       | 保持默认即可。                      |
   | 引导操作       | 保持默认即可，MRS 3.x版本暂时不支持该参数。    |
   | 委托         | 保持默认即可。                      |
   | 数据盘加密      | 默认关闭，保持默认即可。                 |
   | 告警         | 保持默认即可。                      |
   | 规则名称       | 保持默认即可。                      |
   | 主题名称       | 选择相应的主题。                     |
   | Kerberos认证 | 默认打开。                        |
   | 用户名        | admin                        |
   | 密码         | 设置密码，该密码用于登录集群管理页面。          |
   | 确认密码       | 再次输入设置admin用户密码。             |
   | 登录方式       | 密码                           |
   | 用户名        | root                         |
   | 密码         | 设置密码，该密码用于远程登录ECS机器。         |
   | 确认密码       | 再次输入设置的root用户密码。             |
   | 通信安全授权     | 勾选"确认授权"。                    |
      
   
   
 
#### 创建MRS数据源连接
1. 登录[DWS控制台](https://console.huaweicloud.com/dws)，单击已创建好的DWS集群，**确保DWS集群与MRS在同一个区域、可用分区，并且在同一VPC子网下。**
2. 切换到"MRS数据源"，单击"创建MRS数据源连接"。
3. 选择前序步骤创建名称为"mrs_01"的数据源，用户名：admin，密码：password，单击"确定"，创建成功。 
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001304617265.png "点击放大")
   
   
 
#### 创建外部服务器
1. 连接已创建好的DWS集群。
2. 新建一个具有创建数据库权限的用户dbuser： 
   ```
   CREATE USER dbuser WITH CREATEDB PASSWORD 'password';
   ```
   
   

3. 切换为新建的dbuser用户： 
   ```
   SET ROLE dbuser PASSWORD 'password';
   ```
   
   

4. 创建新的mydatabase数据库： 
   ```
   CREATE DATABASE mydatabase;
   ```
   
   

5. 切换到新创建的数据库mydatabase，为dbuser用户授予创建外部服务器的权限，8.1.1及以后版本，还需要授予使用public模式的权限： 
   ```
   GRANT ALL ON FOREIGN DATA WRAPPER hdfs_fdw TO dbuser;
   GRANT ALL ON SCHEMA public TO dbuser;   --8.1.1及以后版本，普通用户对public模式无权限，需要赋权，8.1.1之前版本不需要执行。
   ```
   其中FOREIGN DATA WRAPPER的名字只能是hdfs_fdw，dbuser为创建SERVER的用户名。
   
   
6. 执行以下命令赋予用户使用外表的权限。 
   ```
   ALTER USER dbuser USEFT;
   ```
   
   
7. 切换回Postgres系统数据库，查询创建MRS数据源后系统自动创建的外部服务器。
   
   ```
   SELECT * FROM pg_foreign_server;
   ```
   返回结果如：
   ```
   srvname                      | srvowner | srvfdw | srvtype | srvversion | srvacl |                                                     srvoptions
   --------------------------------------------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------
    gsmpp_server                                     |       10 |  13673 |         |            |        |
    gsmpp_errorinfo_server                           |       10 |  13678 |         |            |        |
    hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca |    16476 |  13685 |         |            |        | {"address=192.168.1.245:9820,192.168.1.218:9820",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs}
   (3 rows)
   ```
   
   
8. 切换到mydatabase数据库，并切换到dbuser用户。 
   ```
   SET ROLE dbuser PASSWORD 'password';
   ```
   
   
9. 创建外部服务器。 
   SERVER名字、地址、配置路径保持与[7]一致即可。
   ```
   CREATE SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca FOREIGN DATA WRAPPER HDFS_FDW 
   OPTIONS 
   (
   address '192.168.1.245:9820,192.168.1.218:9820',   --MRS管理面的Master主备节点的内网IP，可与DWS通讯。
   hdfscfgpath '/MRS/8f79ada0-d998-4026-9020-80d6de2692ca',
   type 'hdfs'
   );
   ```
   
   
10. 查看外部服务器。 
    ```
    SELECT * FROM pg_foreign_server WHERE srvname='hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca';
    ```
    返回结果如下所示，表示已经创建成功：
    ```
    srvname                      | srvowner | srvfdw | srvtype | srvversion | srvacl |                                                     srvoptions
    --------------------------------------------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------
     hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca |    16476 |  13685 |         |            |        | {"address=192.168.1.245:9820,192.168.1.218:9820",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs}
    (1 row)
    ```
    
    
 
#### 创建外表
建立不包含分区列的HDFS外表，表关联的外部服务器为hdfs_server，表对应的HDFS服务上的文件格式为"orc"，HDFS上的数据存储路径为"/user/hive/warehouse/product_info_orc/"。
```
DROP FOREIGN TABLE IF EXISTS product_info_output_ext;
CREATE FOREIGN TABLE product_info_output_ext
(
    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 hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca 
OPTIONS (
format 'orc', 
foldername '/user/hive/warehouse/product_info_orc/',
   compression 'snappy',
    version '0.12'
) Write Only;
```
#### 执行导出数据
创建普通表product_info_output。
```
DROP TABLE product_info_output;
CREATE TABLE product_info_output 
(    
    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)                   
) 
with (orientation = column,compression=middle)
distribute by hash (product_name);
```
将表product_info_output的数据通过外表product_info_output_ext导出到数据文件中。
```
INSERT INTO product_info_output_ext SELECT * FROM product_info_output;
```
若返回如下信息，表示数据导出成功。
```
INSERT 0 10
```
#### 查看导出结果
1. 返回MRS集群页面，单击集群名称进入集群详情界面。
2. 单击"文件管理 \> HDFS文件列表"，在user/hive/warehouse/product_info_orc路径下查看导出的ORC格式文件。 
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001304253241.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-dws/public_sys-resources/note_3.0-zh-cn.png)
   DWS导出ORC数据的文件格式规则如下：
   - 导出至MRS（HDFS）：从DN节点导出数据时，以segment的格式存储在HDFS中，文件命名规则为"**mpp_数据库名_模式名_** **表名称_节点名称_n.orc**"。
   
   - 对于来自不同集群或不同数据库的数据，建议用户可以将数据导出到不同路径下。ORC格式文件大小最大为128MB，Stripe大小最大为64MB。
   
   - 导出完成后会生成_SUCCESS标记文件。
    
   
   
 
