DBLOG
» WTF
Toggle navigation
DBLOG
主页
OCM
1、概览
2、数据导入导出
3、GaussDB(DWS)数据库管理
4、数据库调优与开发实践
5、湖仓一体
6、开发应用
7、集群管理
8、巡检和维运维
About Me
归档
标签
2、GDS
无
2025-05-22 15:08:58
1
0
0
admin
# 1. GDS工具适用场景 GDS是GaussDB(DWS)提供的一个数据导入导出工具,可在支持多种场景下的数据迁移业务,如异型数据库之间、两个集群之间等。主要使用场景包括: - 大数据量表以文本数据作为来源导入 - 大数据量表的导出 - 数据迁移,同构异构集群数据迁移 <br> <br> <br> # 2. GDS工具原理 GDS(Gauss Data Service)数据服务位于数据库系统外部,通过网络与系统相连。数据服务器上部署GDS管理源数据,提供数据服务功能,分发数据文件给DataNode。各DataNode并行收到数据分片,进行数据的入库。数据导出流程刚好反过来。GDS支持导入和导出的文件格式有csv、text、binary、fixed(每一行的数据等长)。 GaussDB(DWS)充分利用多节点并行导入,提高整体导入性能: - CN节点只负责任务的规划及下发,把数据导入的工作交给DN节点,释放了CN节点的资源,使其有能力处理外部请求。 - GDS进程负责数据文件的切分,然后分发给各个DN实例。 - 各DN实例接收到数据分片后解析数据,然后根据表的分布列计算hash值,确定该条数据属于哪个DN;如果属于自身则缓冲到本地,如果属于别的DN则通过网络发送给相应的DN。  <br> <br> # 3. GDS导入数据 GDS进行数据导入时,GDS的数量尽量小于等于DN的数量,防止出现多个GDS同时向一个DN导入,导致出现其他意想不到的问题。GDS导入支持将存储在服务器普通文件系统中的数据导入到GaussDB(DWS)数据库中,暂时不支持将存储在HDFS文件系统上的数据导入GaussDB(DWS)数据库。  <br> <br> # 4. GDS导出数据 GaussDB(DWS)支持的导出模式有Local和Remote模式: - **Remote模式**:将集群中的业务数据导出到集群之外的主机上 - 支持多个GDS服务并发导出,但1个GDS在同一时刻,只能为1个集群提供导出服务。 - 配置与集群节点处于统一内网的GDS服务,导出速率受网络带宽影响,推荐的网络配置为10GE。 - 支持数据文件格式:TEXT、CSV和FIXED。单行数据大小需<1GB。 - **Local模式**:将集群中的业务数据导出到集群节点所在主机上,一种专门为大量小文件而定制的策略。 - 数据将均匀切割并生成到集群节点上指定的文件夹下,需占用集群节点的磁盘空间。 - 支持数据文件格式:TEXT、CSV和FIXED。单行数据大小需<1GB。   <br> <br> # 5. GDS导入数据 启动GDS服务: ``` gds-d /input_data/ -p host:port -H xx.xx.x.x/xx -l /log/gds_log.txt -D -t 2 ``` 常用参数说明: - `-d` 待导入数据文件目录; - `-p` 设置GDS监听IP和端口。未指定时,IP的默认值为127.0.0.1,端口的默认值为8098; - `-H` 设置允许连接到GDS的主机(参数为CIDR格式,仅支持linux系统); - `-l` 设置GDS日志文件; - `--enable-ssl` SSL的认证方式; - `-D` 设置GDS后台运行,一般都指定该选项; 创建外表: ``` CREATE FOREIGN TABLE t1_foreign(a1 VARCHAR2(10), a2 INT) SERVER gsmpp_server OPTIONS (location 'gsfs://host:port/t1.txt', format 'text', encoding 'utf8', delimiter '^', null '') PER NODE REJECT LIMIT 'value' WITH ERROR t1_foreign; ``` GDS导入的数据的目录文件过多时,可以使用正则表达式的形式指定外表的LOCATION,从而选择需要导入的文件。例如: ``` location gsfs://192.168.0.90:5000/t_.*.tx ``` 执行导入: ``` INSERT INTO t1 SELECT * FROM t1_foreign; ``` ### 5.1 分析错误原因  <br> <br> # 6. GDS导出数据 启动GDS服务 同导入。 创建外部表: ``` CREATE FOREIGN TABLE t1_foreign_output(a1 VARCHAR2(10), a2 INT) SERVER gsmpp_server OPTIONS (location 'gsfs://xx.xxx.xxx.xx:port/', format 'text', encoding 'utf8', delimiter '^', null '') WRITE ONLY; ``` 导出的文本命名格式为 `t1_foreign_output.dat.0`: ``` INSERT INTO t1_foreign_output SELECT * FROM t1; ``` <br> <br> # 7. 常见问题 ## 7.1 GDS外表有数据查询为什么hang? ``` 现象:查询GDS外表长时间未结束,也没有报错。 解决方法: - 查询GDS和集群是否网络畅通。 - 查询外表定义中location网络地址是否畅通。 - 查询外表定义中location的协议是否正确对应:ssl -> gsfss,普通协议 -> gsfs。 - 集群GTM或者DN故障。 网络拥塞: - GDS启动的-H 参数配置网段是否正确。 - 排查GDS发送端网络拥塞情况:`netstat -taucp | grep gds端口` ``` <br> <br> ## 7.2 为什么乱码? ``` 现象:导入、导出数据编码无法转换报错,或数据与源数据不符。 原因分析:乱码的原因本质上是因为字符编码转换不匹配。copy或者GDS导入文件中存在混合编码或者不能转换的字符。文件可能来源于另外一个数据库系统,比如Oracle,或者GaussDB数据库编码设置为"不校验编码",一般为标准ASCII类编码,比如PostgreSQL中的sqlascii编码,MySQL中使用latin1作为"不校验编码"。 预防方法:设置客户端、外表、数据文件的编码一致,并创建外表时使用compatible_illegal_chars参数。 解决方法:设置GDS或者copy的容错参数,或者使用iconv命令将文件转码为统一的编码。GDS或者copy的容错机制中有一种可以规避(注意是规避)这个问题。GDS和copy都有一个参数"COMPATIBLE_ILLEGAL_CHARS",会将转换不了的字符替换成‘?’。 ``` <br> <br> ## 7.3 GDS报错句柄不足,报错too many open file 怎么处理? ``` 现象:外表访问报错too many open file。 原因分析:GDS进程占用的文件句柄超过设置的值。 解决办法: - 修改最大进程打开文件句柄数: ``` /etc/security/limits.conf ``` - 修改 `/etc/security/limits.d/*` 目录里的配置文件,对于配置文件中存在nofile配置的都需要修改,没有则跳过;默认优先使用limits.d目录里的配置,再使用limits.conf的配置。 - 修改 `/etc/systemd/system.conf`,修改行:`DefaultLimitNOFILE=640000`,保存退出。 - 重新加载systemd服务配置。 - 重新打开一个session,以集群用户重启GDS进程。 - 执行 `cat /proc/gds的pid/limits` 查询,确认参数已更改。 ``` <br> <br> ## 7.4 GDS遇到网络层错误“connection timed out” 怎么处理? ``` 现象:报错“connection timed out”。 原因1:由于高并发导入导出时GDS端向DN造成发送数据网络拥塞,当出现发送不成功后GDS会接收到网络层错误connection timed out并主动断开连接。之后DN在下次请求GDS数据时也会接收到connection reset by peer 网络层错误。经常发生在数据传输过程中。 可以调整系统参数: ``` net.ipv4.tcp_retries2 net.ipv4.tcp_retries1 ``` 原因2:也可能是因为GDS处理请求较慢,以至于backlog监听队列被填满后,新来的请求会被拒绝,一般发生在建立连接截断时。 可以调大以下参数: ``` ``` 解决方法: net.core.somaxconn=65535 net.ipv4.tcp_max_syn_backlog=65535 net.core.netdev_max_backlog=65535 net.ipv4.tcp_retries1=5 net.ipv4.tcp_retries2=60 ```
上一篇:
2.、集群监控管理
下一篇:
2、SQL编辑器
0
赞
1 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网