更新时间:2024-09-12 GMT+08:00

导出ORC数据到MRS

GaussDB(DWS)数据库支持通过HDFS外表导出ORC格式数据至MRS,通过外表设置的导出模式、导出数据格式等信息来指定导出的数据文件,利用多DN并行的方式,将数据从GaussDB(DWS)数据库导出到外部,存放在HDFS文件系统上,从而提高整体导出性能。

准备环境

已创建DWS集群,需确保MRS和DWS集群在同一个区域、可用区、同一VPC子网内,确保集群网络互通。

创建MRS分析集群

  1. 登录华为云控制台,选择“大数据 > MapReduce服务”,单击“购买集群”,选择“自定义购买”,填写软件配置参数,单击“下一步”。

    表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管理控制台,单击已创建好的DWS集群,确保DWS集群与MRS在同一个区域、可用分区,并且在同一VPC子网下。
  2. 切换到“MRS数据源”,单击“创建MRS数据源连接”。
  3. 选择前序步骤创建名为的“mrs_01”数据源,用户名:admin,密码:password,单击“确定”,创建成功。

创建外部服务器

  1. 使用Data Studio连接已创建好的DWS集群。
  2. 新建一个具有创建数据库权限的用户dbuser:

    1
    CREATE USER dbuser WITH CREATEDB PASSWORD 'password';
    

  1. 切换为新建的dbuser用户:

    1
    SET ROLE dbuser PASSWORD 'password';
    

  1. 创建新的mydatabase数据库:

    1
    CREATE DATABASE mydatabase;
    

  1. 执行以下步骤切换为连接新建的mydatabase数据库。

    1. 在Data Studio客户端的“对象浏览器”窗口,右键单击数据库连接名称,在弹出菜单中单击“刷新”,刷新后就可以看到新建的数据库。
    2. 右键单击“mydatabase”数据库名称,在弹出菜单中单击“打开连接”
    3. 右键单击“mydatabase”数据库名称,在弹出菜单中单击“打开新的终端”,即可打开连接到指定数据库的SQL命令窗口,后面的步骤,请全部在该命令窗口中执行。

  2. 为dbuser用户授予创建外部服务器的权限,8.1.1及以后版本,还需要授予使用public模式的权限:

    1
    2
    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的用户名。

  3. 执行以下命令赋予用户使用外表的权限。

    1
    ALTER USER dbuser USEFT;
    

  4. 切换回Postgres系统数据库,查询创建MRS数据源后系统自动创建的外部服务器。

    1
    SELECT * FROM pg_foreign_server;
    

    返回结果如:

    1
    2
    3
    4
    5
    6
                         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)
    

  5. 切换到mydatabase数据库,并切换到dbuser用户。

    1
    SET ROLE dbuser PASSWORD 'password';
    

  6. 创建外部服务器。

    SERVER名字、地址、配置路径保持与8一致即可。

    1
    2
    3
    4
    5
    6
    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'
    );
    

  7. 查看外部服务器。

    1
    SELECT * FROM pg_foreign_server WHERE srvname='hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca';
    

    返回结果如下所示,表示已经创建成功:

    1
    2
    3
    4
                         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/”。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
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。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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导出到数据文件中。
1
INSERT INTO product_info_output_ext SELECT * FROM product_info_output;

若返回如下信息,表示数据导出成功。

1
INSERT 0 10

查看导出结果

  1. 返回MRS集群页面,单击集群名称进入集群详情界面。
  2. 单击“文件管理 > HDFS文件列表”,在user/hive/warehouse/product_info_orc路径下查看导出的ORC格式文件。

    GaussDB(DWS)导出ORC数据的文件格式规则如下:

    • 导出至MRS(HDFS):从DN节点导出数据时,以segment的格式存储在HDFS中,文件命名规则为“mpp_数据库名_模式名_表名称_节点名称_n.orc”。
    • 对于来自不同集群或不同数据库的数据,建议用户可以将数据导出到不同路径下。ORC格式文件大小最大为128MB,Stripe大小最大为64MB。
    • 导出完成后会生成_SUCCESS标记文件。