非对等gp集群迁移

非对等gp集群迁移,第1张

老gp:单机1maste+4p

新gp:1+2集群,4p4m

为方便 *** 作,n2n到服务器

pg_dump与pgrestore

dump为sql,太慢(dump全库一个通宵未完成,官方说一般只用来dump ddl,不dump data)

用者散嫌做kettl资源库的备份还原尚可

/usr/local/greenplum-db-5.0.0/bin/gptransfer -t bigdata.edw.dim_date --source-map-file=seg_hosts_file -a --dest-host=172.18.1.49 --dest-database=bigdata --dest-user=gpadmin --batch-size=2 --truncate >gptranfer.log

原有gptranser方式,但gp5取消了该功能,其思路:

根据此原理,开发了以下步骤,并优化去掉了scp这步:

老gp172.18.120:

新gp2个数据节点开启,减掘慎少数据传输,双写加快速度

171.18.1.50:

171.18.1.51:

由1.20写到50和51

测试本地导出txt再压缩,速度太慢:

直接导出压缩格式:

sql命令copy导出到压缩:copy to program功能

5.1+才提供该功能,顺便将老gp5.0升级到5.8,参考: https://www.jianshu.com/p/8398625f9f91

外部表导入数据

需要将/home/gpdata/gpfdist路径首手修改为远程服务器的目录路径:(nfs方式?)

GPFDIST是emc工程师推荐的最快的导入导出工具。导入导出数据的时候gpfdist是同时并行的与各个节点互动,效率很高(十分高!如果忽略掉GP的一些其他问题,简直完美)。

在我们的实际试验中使用一个gpfdist加上千兆网卡装载4G的gz文件(压缩前为36G)的文件约要170秒;然后再导出这个数据耗时约580秒。如果使用四个袭含gpfdist,在千兆网卡的支持下速度大约可以提高2.5-3倍。

概述:

gpfdist [-d directory] [-p http_port] [-l log_file] [-t timeout] [-m max_length]

-d:

gpfdist所指向的路径,在这个路径下gpfdist才能读取清禅塌文件或写入文件;

如果没有指定这个东西,gpfdist会默认为指向当前路径;

注意:启动gpfdist服务的用户要对这个路径有读写权限。

-l:

指定日志文件的路径,记录gpfdist的运行日志,其实是个简单日志(包含一些启动、关闭、找不到文件之类的无聊东西)。

-p:

指定gpfdist服务端口,这个值默认是8080,前置机一般使用9000以上的端口

-t:

为gp创建一个到gpfdist的连接设置一个超时时间;

默认是5秒,允许设置值范围为2-30秒。一般情况不需对这个做设定。

-m:

允许文本文件行的最大长度(以bytes为单位)。默认值为32768.

取值范围为: 32K -- 1MB,目前前置机的项目都只是使用默认值。

-?

获得帮助

--version

查看版本

COPY命令是使用比较灵活的导入导出工具,这个工具是postgresql本身带的工具实现表和文答圆件之间拷贝数据,EMC公司对其进行了加工,使其在greenplum的集群环境下可以使用。目前在GP4.1及之前的版本中copy的是逐个节点(逐个postgresql )来导入导出的,所以在效率上比gpfdist要低;

但是copy命令可以很简洁完成一个导入导出 *** 作,使得它也具有十分光辉的魅力。

由于这个工具是直接从postgresql发展出来的完全可以按照postgresql的方式使用,因此在网络上关于copy的资料十分丰富,所以很多开发人员都万分乐意的使用之。

概述(来源于万能的帮助文档):

COPY tablename [ ( column [, ...] ) ]

FROM { 'filename' | STDIN }

[ [ WITH ]

[ BINARY ]

[ OIDS ]

[ DELIMITER [ AS ] 'delimiter' ]

[ NULL [ AS ] 'null string' ]

[ CSV [ HEADER ]

[ QUOTE [ AS ] 'quote' ]

[ ESCAPE [ AS ] 'escape' ]

[ FORCE NOT NULL column [, ...] ]

COPY { tablename [ ( column [, ...] ) ] | ( query ) }

TO { 'filename' | STDOUT }

[ [ WITH ]

[ BINARY ]

[ HEADER ]

[ OIDS ]

[ DELIMITER [ AS ] 'delimiter' ]

[ NULL [ AS ] 'null string' ]

[ CSV [ HEADER ]

[ QUOTE [ AS ] 'quote' ]

[ ESCAPE [ AS ] 'escape' ]

[ FORCE QUOTE column [, ...] ]

参数说明:

1、tablename

现存表的名字(可以有模式修饰)

2、column

可选的待拷贝字段列表。如果没有声明字段列表,那么将使用所有字段。

3、query

一个必须用圆括弧包围的 SELECT 或 VALUES 命令,其结果将被拷贝。

4、filename

输入或输出文件的绝对路径。Windows 用户可能需要使用 E'' 字符串和双反斜线作为路径分割符。

5、STDIN

声明输入是来自客户端应用

6、STDOUT

声明输入前往客户端应用

7、BINARY

使用二进制格式存储和读取,而不是以文本的方式。在二进制模式下,不能声明 DELIMITER, NULL, CSV 选项。

8、OIDS

声明为每行拷贝内部对象标识(OID)。如果为一个 query 拷贝或者没有 OID 的表声明了 OIDS 选项,则抛出一个错误。

9、delimiter

在文件中分隔各个字段的单个字符。在文本模式下,缺省是水平制表符,在 CSV 模式下是一个逗号。

10、null string

这是一个代表 NULL 值的字符串。在文本模式下缺省是 \N ,在 CSV 模式下是一个没有引号的 NULL 。如果你不想区分 NULL 和空字符串,那么即使在文本模式下你可能也会使用一个空字符串。

【注意】在使用 COPY FROM 的时候,任何匹配这个字符串的字符串将被存储为 NULL 值,所以你应该确保你用的字符串和 COPY TO 相同。

11、CSV

打开逗号分隔变量(CSV)模式

12、HEADER

声明文件包含一个标题头行,包含文件中每个字段的名字。输出时,第一行包含表的字段名;输入时,第一行被忽略。

13、quote

声明 CSV 模式里的引号字符。缺省是双引号。

14、escape

声明在 CSV 模式下应该出现在数据里 QUOTE 字符值前面的字符。缺省是 QUOTE 值(通常是双引号)。

15、FORCE QUOTE

在 CSV COPY TO 模式下,强制在每个声明的字段周围对所有非 NULL 值都使用引号包围。NULL 输出从不会被引号包围。

16、FORCE NOT NULL

在 CSV COPY FROM 模式下,把声明的每个字段都当作它们有引号包围来处理,因此就没有 NULL 值。对于在 CSV 模式下的缺省空字符串(''),这样导致一个缺失的数值当作一个零长字符串输入。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12206417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存