【云小课】EI第8课 导入DWS数据量太大?试试GDS并行导入

Hi,EI 发表于 2020/08/19 14:58:52 2020/08/19
【摘要】 DWS提供了数据服务工具GDS来帮助分发待导入的用户数据及实现数据的高速导入。本节云小课通过一个导入任务帮您了解GDS导入的全过程。


关于并行导入

GDS是GaussDB(DWS)内部自研的数据导入工具,大数据量导入时,DWS支持使用GDS工具通过外表并行导入数据到集群。

  • 并行导入功能通过外表设置的导入策略、导入数据格式等信息来识别数据源文件,利用多DN并行的方式,将数据从数据源文件导入到数据库中,从而提高整体导入性能。

  • 数据量大,数据存储在多个服务器上时,在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。


GDS导入流程图


准备工作

在使用GDS导入数据前,请先完成准备弹性云服务器作为GDS服务器下载GDS工具包和SSL证书


使用GDS导入数据

数据存储在多个服务器上时,需要在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。GDS在各台数据服务器上的安装配置和启动方法相同,这里以一台服务器为例进行说明。

步骤1:准备源数据

 1.以root用户登录用于存放数据源文件的服务器(又称数据服务器或GDS服务器),创建数据文件存放目录“/input_data”。以IP192.168.0.90的数据服务器为例。

       mkdir -p /input_data

 2.使用MobaXterm将数据源文件上传至“/input_data”中。


步骤2:安装配置和启动GDS

  1. 以root用户登录数据服务器192.168.0.90,创建存放GDS工具包的目录/opt/bin/dws。

    mkdir -p /opt/bin/dws

  2. GDS工具包上传至上一步所创建的目录中。以上传SUSE Linux版本的工具包为例 ,将GDS工具包“dws_client_redhat_x64.tar.gz”上传至“/opt/bin/dws”中。

  3. 在工具包所在目录下,解压工具包。

    cd /opt/bin/dws/gds

    tar -zxvf dws_client_redhat_x64.tar.gz

  4. (可选)如果使用SSL加密传输数据,请一并将SSL证书上传/opt/bin/dws目录中。

  5. 创建用户gds_user及其所属的用户组gdsgrp。此用户用于启动GDS,且需要拥有读取数据源文件目录的权限。

    groupadd gdsgrp
    useradd -g
    gdsgrp gds_user

  6. 修改工具包以及数据源文件目录属主为创建的用户gds_user及其所属的用户组gdsgrp

    CHOWN -R gds_user:gdsgrp /opt/bin/
    CHOWN -R
    gds_user:gdsgrp /input_data

  7. 切换到用户gds_user

    su - gds_user

  8. 启动GDS

    SSL模式传输数据的情况下,使用如下命令启动GDS

    /opt/bin/dws/gds/gds -d /input_data/ -p 192.168.0.90:5000  -H 10.10.0.1/24 -l /opt/bin/dws/gds/gds_log.txt -D

    使用SSL加密方式传输数据时,在确保执行了步骤5后,使用如下命令启动GDS

    /opt/bin/dws/gds/gds -d /input_data/ -p 192.168.0.90:5000  -H 10.10.0.1/24 -l /opt/bin/dws/gds/gds_log.txt -D --enable-ssl --ssl-dir /opt/bin/dws/gds

    命令中的斜体部分请根据实际填写。

    -d dir:保存有待导入数据的数据文件所在目录。本示例中为“/input_data/”。

    -p ip:port:GDS监听IP和监听端口。默认值为:127.0.0.1,需要替换为能跟DWS通信的万兆网IP。监听端口的取值范围:1024~65535。默认值为:8098。本示例中配置为:192.168.0.90:5000。

    -H address_string:允许哪些主机连接和使用GDS服务。参数需为CIDR格式。此参数配置的目的是允许DWS集群可以访问GDS服务进行数据导入。所以请保证所配置的网段包含DWS集群各主机。

    -l log_file:存放GDS的日志文件路径及文件名。本示例中为“/opt/bin/dws/gds/gds_log.txt”。

    -D:后台运行GDS。仅支持Linux操作系统下使用。

    --enable-ssl:启用SSL加密方式传输数据。

    --ssl-dir:SSL证书所在目录。需与步骤6中的证书保存目录保持一致。

步骤3:创建GDS外表

创建外表product_info_ext用于接收数据服务器上的数据,使用SQL客户端工具连接DWS数据库。

DROP FOREIGN TABLE IF EXISTS product_info_ext; 
CREATE FOREIGN TABLE product_info_ext 
(  
     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 gsmpp_server   
 OPTIONS(  
 LOCATION 'gsfs://192.168.0.90:5000/*',  
 FORMAT 'CSV' ,  
 DELIMITER ',',  
 ENCODING 'utf8',  
 HEADER 'false',  
 FILL_MISSING_FIELDS 'true',  
 IGNORE_EXTRA_DATA 'true'  
 )  
 READ ONLY  
 LOG INTO product_info_err   
 PER NODE REJECT LIMIT 'unlimited';

设置数据格式信息是根据导出时设置的详细数据格式参数信息指定的,参数设置如下所示:

  • 数据源文件格式(format)为CSV

  • 字段分隔符(delimiter)为英文逗号。

  • 编码格式(encoding)为UTF-8

  • 数据文件是否包含标题行(header)为默认值false,即导入时数据文件第一行被识别为数据。

  • 设置导入容错性如下所示:

  • FILL_MISSING_FIELDS 'true',表示最后一个字段缺失时,把最后一个字段的值设置为NULL,不报错。

  • IGNORE_EXTRA_DATA 'true',数据源文件中字段比外表定义列数多,则忽略行尾多出来的列,不报错。

  • 将数据导入过程中出现的数据格式错误信息(LOG INTO error_table_name)写入表err_tpcds_reasons

  • 允许出现的数据格式错误个数(PER NODE REJECT LIMIT 'value')为unlimited,即接受导入过程中所有数据格式错误。


步骤4:将数据导入到DWS

1.在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.将数据源文件中的数据通过外表“product_info_ext”导入到表“product_info”中。

 INSERT INTO product_info SELECT * FROM product_info_ext;



步骤5:处理错误表

 1.查询错误信息。

   SELECT * FROM product_info_err;

 2.处理错误表中的错误信息。


步骤6:优化查询效率

在数据导入完成后,执行ANALYZE语句生成表统计信息。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。

如果导入过程中,进行了大量的更新或删除行时,应运行VACUUM FULL命令,然后运行ANALYZE命令。

1.对表product_info执行VACUUM FULL

 VACUUM FULL product_info; 
 VACUUM

2.更新表product_info的统计信息。

 ANALYZE product_info; 
 ANALYZE


步骤7:停止GDS

 1.以gds_user用户登录安装GDS的数据服务器。

 2.停止GDS

   查询GDS进程号。其中GDS进程号为128954

         ps -ef|grep gds

    gds_user 128954      1  0 15:03 ?        00:00:00 gds -d /input_data/ -p 192.168.0.90:5000 -l /opt/bin/dws/gds/gds_log.txt -D
    gds_user 129003 118723  0 15:04 pts/0    00:00:00 grep gds

    使用“kill”命令,停止GDS。其中128954为上一步骤中查询出的GDS进程号。

          kill -9 128954



这就是GDS导入的全部过程了,了解更多数据仓库服务内容,请点击此处据仓库服务



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。