GaussDB for DWS数据融合系列第六期:GDS导入数据

       数据并行导入过程中,需要通过创建外表时设置的导入模式和数据源文件位置等参数,来定位数据源文件。LibrA支持的导入模式有Normal推荐使用)、SharedPrivate。请从支持的导入模式的扩展性、可操作性、支持的数据格式等维度分析,规划适合的并行导入模式。并根据所规划的导入模式,配置相应的数据服务器,存放数据源文件,文档采用Noremal模式详情请查阅:产品文档-开发者指南-导入数据-创建外表-规划导入模式)。

       通过GDS外表设置的导入模式、导入数据格式等信息来识别数据源文件,利用多DN并行的方式,将数据从数据源文件导入到数据库中,从而提高整体导入性能。数据源文件存放在普通文件系统中,不支持在HDFS文件系统直接指定数据源。

优势:

1. CN只负责任务的规划及下发,把数据导入的工作交给了DN,释放了CN的资源,使其有能力处理外部请求。

2. 通过使各DN都参与数据导入,充分利用各设备的计算能力及网络带宽。

3. 支持导入过程中对数据做预处理。

4. 支持在导入过程中,针对数据格式错误设置导入容错性,并可在导入结束后根据错误信息定位错误数据。

劣势:

需要创建外表,并且对于NORMAL模式需要启动GDS服务。

适用场景:

高并发、大数据量导入。

通过外表并行导入数据:

相关概念:

数据源文件:存储有数据的TEXT、CSV或FIXED结尾的文件。文件中保存的是待导入数据库的数据。

外表:用于存放数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息,关联数据文件与数据库实表的对象。

GDS:数据服务工具。向LibrA导入数据时,需要将此工具部署到数据源文件所在的服务器上,使DN可以通过该工具获取数据。

数据库普通表:数据库中的表,数据源文件中的数据最终导入到这些表中存储,包括行存表和列存表。

数据服务器:数据源文件所在的服务器称为数据服务器。由于使用GDS工具导入时,GDS需要安装在数据服务器上(可以理解为客户端),因此数据服务器也是GDS服务器。

2.GDS导入流程
    

3.操作步骤

此处引用text格式作为数据源文件,CSV格式和FIXED 格式详见产品文档-开发者指南-导入数据-创建外表-识别导入数据格式章节;

关于数据容错性 请见产品文档-开发者指南-导入数据-创建外表-规划导入容错性。

 

3.1以root用户登录用于存放数据源文件的服务器(又称数据服务器或GDS服务器);确认libra到gds客户端的网络链路是通的,ip白名单已添加客户端IP。

3.2创建数据文件存放目录“/input_data”。

mkdir -p /input_data将数据源文件上传至上一步所创建的目录中。

3.3在数据服务器上安装配置并启动GDS,

gds -d /input_data/ -p client_ip:5000 -H 0.0.0.0/0 -l /log/gds_log.txt -D -t 2

with error_t1_foreign;

-d 待导入数据文件目录;

-p 设置GDS**IP和端口。未指定时,IP的默认值为127.0.0.1,端口的默认值为8098(请确认网关和端口是开放的);

-H 设置允许连接到GDS的主机(参数为CIDR格式,仅支持linux系统);

-l 设置GDS日志文件;

-D 设置GDS后台运行,一般都指定该选项;

3.4 添加用户和用户组 groupadd wheel,(数据库用户及所属用户组已存在,可跳过本步骤)。

1.useradd -g wheel omm若出现以下提示,

useradd: Account 'omm' already exists.

groupadd: Group 'wheel' already exists.

3.5 修改数据源文件目录属主为omm

chown -R omm:wheel /input_data 通过URL方式设置外表创建时的参数“location”,用于指定数据源文件。

URL末尾必须指定文件的匹配模式或者文件名。多个URL之间使用‘|’间隔。

URL个数应小于DN个数,且不能使用多个地址相同的URL。

 

     3.6 创建外表

create foreign table t1_foreign(a1 varchar2(10), a2 int)

SERVER gsmpp_server OPTIONS (location 'gsfs:// client_ip:5000/t1.txt',

format ‘text’, encoding ‘utf8’, delimiter ‘^’, null ‘’)per node reject limit ‘value’

     3.7 参数介绍

with error_t1_foreign;

gsfs:该外表对应的文件或者路径,可以指定多个文件或目录并行导入;

format:数据源文件的格式,有三种text、csv、fixed(定长),默认是text;

encoding:数据源文件编码格式,默认是数据库编码格式;

delimiter:数据源文件行数据的字段分隔符,支持多字符;如果csv格式,还要指定quote选项;

null:数据源文件中把什么字符识别为null;

per node reject_limit:指定本次数据导入过程中每个DN实例上允许出现的数据格式错误的数量,如果有一个DN实例上错误数量大于设定值,本次导入失败,报错退出。

with 数据导入过程中出现的数据格式错误信息将被写入error_table_name指定的错误信息表中。

示例:

GDS数据服务器IP为192.168.0.90,假定启动GDS时设置的**端口为5000,设置的数据文件存放目录为“/input_data”,实际的数据文件存放目录为“/input_data/import/”。

 

根据以上情况,在创建外表时,指定参数“location”为“gsfs://192.168.0.90:5000/import/*”。如有多个gds服务location可以“|” 为分隔符连接多个gds,location gsfs://192.168.0.90:5000/*| gsfs://192.168.0.91:5000/*',

 

3.9导入数据

1. 验证数据源是否能正常查询出数据,

Select * from  foreign_table_name limit 10;

2. 通过查询外表将数据插入内表

Insert into inner_tablename_select * from   foreign_table_name;

3. 查询错误信息表err_tpcds_reasonS,处理数据加载错误。  

SELECT * FROM err_tpcds_reasonS

4. 处理错误表详见:产品文档-开发者指南-导入数据-创建外表-处理错误表

 

4.注意事项

1.导入数据时源数据不能放在dn节点,否则会出现数据倾斜,造成gds性能不佳;(dn数据离源数据越近 越容易获取数据(数据的亲源性),而其他的数据节点会出现负载严重偏离的情况,可以1.top  查看gds  进程号 2.gstack  pid查看进程 3.iostat -x 1 10 查看Io速率)

2.导入数据时 可以将源数据放在相同服务器的不同磁盘下面 并且保证数据文件的唯一性(有重复的文件会导致  导入表数据的冗余,目前Gds还无法识别相同文件数据

3.保证表的数据列哈希值得唯一性  (如果数值不唯一则会形成数据被存储到单个dn 造成数据倾斜

4.一台服务器可以启动3个gds服务  分不同端口  性能最佳

5. GDS数据导出

   规划数据服务器与集群处于同一内网,数据服务器和数据节点不在同一集群,数据源文件格式为CSV,所以规划的并行导出模式为Remote模式。

1. 客户端创建数据接收目录

1.mkdir -p /out_date

2.添加用户和组 groupadd wheel;useradd -g wheel omm

3. chown -R omm:wheel /output_data

        4. 启动GDS服务

/opt/bin/gds/gds -d /output_data -p  192.168.0.90:5005 -H 10.10.0.1/24 –D

 

5.  在数据库中创建外表foreign_tpcds_reasonS用于接收数据服务器上的数据。

由于启动GDS时,设置的导出数据文件存放目录为“/output_data/”,GDS**端口为5005。创建的导出数据文件存放目录为“/output_data/”。所以设置参数“location”为“gsfs://192.168.0.90:5005/”。

6.相关参数说明

数据文件格式(format)为CSV。

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

字段分隔符(delimiter)为E'\x08'。

引号字符(quote)为0x1b。

数据文件中空值(null)为没有引号的空字符串。

逃逸字符(escape)为默认值双引号。

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

7.创建的外表

CREATE FOREIGN TABLE foreign_tpcds_reasonS

(

  r_reason_sk    integer        not null,

  r_reason_id    char(16)       not null,

  r_reason_desc  char(100)

) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.90:5005/', format 'CSV',encoding 'utf8',delimiter E'\x08', quote E'\x1b', null '') WRITE ONLY;在数据库上,通过外表foreign_tpcds_reasonS,将数据导出到数据文件中。

INSERT INTO foreign_tpcds_reasonS SELECT * FROM reasonS;

8.以omm用户登录数据服务器,停止GDS。

ps -ef|grep gds

omm 128954      1  0 15:03 ?        00:00:00 gds -d /output_data -p 192.168.0.90:5005 -D

omm 129003 118723  0 15:04 pts/0    00:00:00 grep gds

kill -9 128954

 

 

(完)