GaussDB(DWS)数据量太大?试试GDS并行导入
关于并行导入
GDS是GaussDB(DWS)内部自研的数据导入工具,大数据量导入时,DWS支持使用GDS工具通过外表并行导入数据到集群。
并行导入功能通过外表设置的导入策略、导入数据格式等信息来识别数据源文件,利用多DN并行的方式,将数据从数据源文件导入到数据库中,从而提高整体导入性能。
数据量大,数据存储在多个服务器上时,在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。
GDS导入流程图
准备工作
在使用GDS导入数据前,请先完成准备弹性云服务器作为GDS服务器、下载GDS工具包和SSL证书。
使用GDS导入数据
数据存储在多个服务器上时,需要在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。GDS在各台数据服务器上的安装配置和启动方法相同,这里以一台服务器为例进行说明。
步骤1:准备源数据
1.以root用户登录用于存放数据源文件的服务器(又称数据服务器或GDS服务器),创建数据文件存放目录“/input_data”。以IP为192.168.0.90的数据服务器为例。
mkdir -p /input_data
2.使用MobaXterm将数据源文件上传至“/input_data”中。
步骤2:安装配置和启动GDS
以root用户登录数据服务器192.168.0.90,创建存放GDS工具包的目录/opt/bin/dws。
mkdir -p /opt/bin/dws
将GDS工具包上传至上一步所创建的目录中。以上传SUSE Linux版本的工具包为例 ,将GDS工具包“dws_client_redhat_x64.tar.gz”上传至“/opt/bin/dws”中。
在工具包所在目录下,解压工具包。
cd /opt/bin/dws/gds
tar -zxvf dws_client_redhat_x64.tar.gz
(可选)如果使用SSL加密传输数据,请一并将SSL证书上传/opt/bin/dws目录中。
创建用户gds_user及其所属的用户组gdsgrp。此用户用于启动GDS,且需要拥有读取数据源文件目录的权限。
groupadd gdsgrp
useradd -g gdsgrp gds_user修改工具包以及数据源文件目录属主为创建的用户gds_user及其所属的用户组gdsgrp。
CHOWN -R gds_user:gdsgrp /opt/bin/
CHOWN -R gds_user:gdsgrp /input_data切换到用户gds_user。
su - gds_user
启动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导入的全部过程了,了解更多数据仓库服务内容,请点击此处!
下一课,我们带您体验从OBS导入数据到DWS,敬请期待。
- 点赞
- 收藏
- 关注作者
评论(0)