【大数据之数据仓库】数据迁移到GreenPlum的方式

阿凡达2018-07-10 12:50

经过前面多篇博文的测试和对比,我们的GreenPlum集群现在已经准备就绪,就等各位的fire了,吼吼~~

今天的博文,向各位介绍下怎么把外部数据源的数据迁移到GreenPlum上来,我们选择了4种类型的数据源:MySQL、PostgreSQL、HDFS、TEXT。
1.MySQL
使用 rds_dbsync工具中的mysql2pgsql小工具,快照数据迁移,不支持增量数据。编译rds_dbsync工具比较麻烦,因为涉及到mysql、postgresql的库,这里不展开介绍。
  • 配置my.cfg
[src.mysql]   源库 mysql 连接信息
host = "192.168.1.1"
port = "3306"
user = "test"
password = "test"
db = "test"
encodingdir = "share"
encoding = "utf8"
[desc.pgsql]   目的库Greenplum连接信息
connect_string = "host=192.168.1.1 dbname=test port=5888  user=test password=pgsql"
  • 配置tables.cfg
table1 : select * from table_big where column1 < '2016-08-05'
table2 :
table3
table4: select column1, column2 from tableX where column1 != 10
table5: select * from table_big where column1 >= '2016-08-05'
  • 创建内部表
   [root@hzadg-helf-xxx ~]# ./mysql2pgsql -d
   [gpadmin@hzadg-helf-xxx ~]# psql -d helf
   helf=# CREATE TABLE part (
        P_PARTKEY int4,
        P_NAME text,
        P_MFGR text,
        P_BRAND text,
        P_TYPE text,
        P_SIZE int4,
        P_CONTAINER text,
        P_RETAILPRICE numeric,
        P_COMMENT text)
    with (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=1, BLOCKSIZE=1048576, OIDS=false)
    DISTRIBUTED BY (P_PARTKEY)

  • 同步数据

[root@hzadg-helf-xxx ~]# ./mysql2pgsql -l  -s schema
2.PostgreSQL
使用 rds_dbsync工具中的pgsql2pgsql小工具,快照数据迁移,支持增量数据。
  • 配置my.cfg
[src.pgsql]     源库 pgsql 连接信息
connect_string = "host=192.168.1.1 dbname=test port=5888  user=test password=pgsql"
[local.pgsql]  本地临时DB pgsql 连接信息
connect_string = "host=192.168.1.1 dbname=test port=5888  user=test2 password=pgsql"
目的库 pgsql 连接信息
[desc.pgsql]
connect_string = "host=192.168.1.1 dbname=test port=5888  user=test3 password=pgsql"

  • 创建内部表
[gpadmin@hzadg-helf-xxx ~]# psql -d helf
helf=# CREATE TABLE part (
        P_PARTKEY int4, 
        P_NAME text, 
        P_MFGR text, 
        P_BRAND text, 
        P_TYPE text, 
        P_SIZE int4, 
        P_CONTAINER text, 
        P_RETAILPRICE numeric, 
        P_COMMENT text) 
    with (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=1, BLOCKSIZE=1048576, OIDS=false)
    DISTRIBUTED BY (P_PARTKEY)
  • 全库迁移
[root@hzadg-helf-xxx ~]# ./pgsql2pgsql
3.HDFS

使用gphdfs协议,以外部表的方式,用psql直接在线导入。

  • 创建外部表

[gpadmin@hzadg-helf-xxx ~]# psql -d helf
helf=# CREATE TABLE ext_tpch.PART (
	P_PARTKEY		SERIAL,
	P_NAME			VARCHAR(55),
	P_MFGR			CHAR(25),
	P_BRAND			CHAR(10),
	P_TYPE			VARCHAR(25),
	P_SIZE			INTEGER,
	P_CONTAINER		CHAR(10),
	P_RETAILPRICE	DECIMAL,
	P_COMMENT		VARCHAR(23)
)
LOCATION ('gphdfs://:/data/tpch/part.tbl')
FORMAT 'TEXT' (DELIMITER '|' NULL AS '' ESCAPE AS E'\\');

  • 创建内部表

[gpadmin@hzadg-helf-xxx ~]# psql -d helf
helf=# CREATE TABLE part (
        P_PARTKEY int4, 
        P_NAME text, 
        P_MFGR text, 
        P_BRAND text, 
        P_TYPE text, 
        P_SIZE int4, 
        P_CONTAINER text, 
        P_RETAILPRICE numeric, 
        P_COMMENT text) 
    with (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=1, BLOCKSIZE=1048576, OIDS=false)
    DISTRIBUTED BY (P_PARTKEY)

  • Hadoop环境配置

vi /usr/local/greenplum-db/lib/hadoop/hadoop_env.sh
export JAVA_HOME=XXX
export HADOOP_HOME=XXX
for f in /opt/cloudera/parcels/CDH/jars/hadoop-*.jar;do
CLASSPATH=${CLASSPATH}:$f;
done

  • GreenPlum环境配置

gpconfig -c gp_hadoop_target_version -v "'XXX'"
gpconfig -c gp_hadoop_home -v "'XXX'"
gpstop -u

  • 全表迁移

[gpadmin@hzadg-helf-xxx ~]# psql -d helf
helf=# insert into tpch.PART select * from ext_tpch.PART;
4.TEXT

使用gpfdist,以外部表的方式,用psql直接在线导入。

  • 创建外部表

[root@hzadg-helf-xxx ~]# psql -d helf
helf=# CREATE TABLE ext_tpch.PART (
	P_PARTKEY		SERIAL,
	P_NAME			VARCHAR(55),
	P_MFGR			CHAR(25),
	P_BRAND			CHAR(10),
	P_TYPE			VARCHAR(25),
	P_SIZE			INTEGER,
	P_CONTAINER		CHAR(10),
	P_RETAILPRICE	DECIMAL,
	P_COMMENT		VARCHAR(23)
)
LOCATION ('gpfdist://HOST:PORT/part.tbl')
FORMAT 'TEXT' (DELIMITER '|' NULL AS '' ESCAPE AS E'\\');
  • 创建内部表
[gpadmin@hzadg-helf-xxx ~]# psql -d helf
helf=# CREATE TABLE part (
        P_PARTKEY int4, 
        P_NAME text, 
        P_MFGR text, 
        P_BRAND text, 
        P_TYPE text, 
        P_SIZE int4, 
        P_CONTAINER text, 
        P_RETAILPRICE numeric, 
        P_COMMENT text) 
    with (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=1, BLOCKSIZE=1048576, OIDS=false)
    DISTRIBUTED BY (P_PARTKEY)
  • 全表迁移
[root@hzadg-helf-xxx ~]# psql -d helf
helf=# insert into tpch.PART select * from ext_tpch.PART;
从原理的角度,rds_dbsync这个工具利用了GreenPlum的COPY机制,在大数据集面前,立马gogo了,基本没什么卵用。相对而言,HDFS和TEXT两种类型的数据迁移方式,更适用于线上系统,5颗星推荐!

本文来自网易实践者社区,经作者何李夫授权发布。