使用Kettle迁移AWS Redshift小表到GaussDB(DWS)集群
本实践演示如何使用开源工具Kettle将Redshift数据迁移到GaussDB(DWS)。
了解Kettle
Kettle是一个开源的ETL(Extract-Transform-Load)工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。它提供了一个可视化的图形化界面,使用户能够通过拖放和连接组件来设计和配置ETL流程。支持多种数据源和目标,包括关系型数据库、文件、API、Hadoop等。Kettle提供了丰富的转换和清洗功能,可以对数据进行格式转换、数据过滤、数据合并、数据计算等操作。
它的主要功能如下:
- 无代码拖拽式构建数据管道。
- 多数据源对接。
- 数据管道可视化。·
- 模板化开发数据管道。
- 可视化计划任务。
- 深度Hadoop支持。
- DWS需要绑定公网IP后才能与Kettle连接使用。
- Kettle和云数据迁移(Cloud Data Migration,简称CDM)都适用于批处理场景,当数据量或表数量较小时,推荐使用kettle,反之使用CDM。
- 支持从数据库导出数据到文件,也支持将数据导入到数据库。
- Kettle可通过建立触发器、时间戳字段、Kafka等方式实现数据实时同步。
本实践预计时长90分钟,演示迁移Redshift的基本流程如下:
- 迁移前准备:准备迁移工具Kettle和相关套件包。
- 步骤一:部署Kettle工具:配置Kettle工具。
- 步骤二:新建Transformation并配置源端数据库和目标数据库:创建一个transformation任务,配置好源端和目标端数据库。
- 步骤三:迁移数据:包括全量迁移、增量迁移。
- 步骤四:并发执行迁移作业:创建一个job,用于并发执行多个transformation任务,达到并发迁移多张表的目的。
- 步骤五:优化迁移作业:通过调整Kettle内存大小和Job的任务数量,提高迁移效率。
迁移前准备
- 已经购买了GaussDB(DWS)集群,并已绑定弹性公网IP,并已规划创建好目标数据库dws_vd。
- 已获取Kettle工具包,下载地址(本文以9.4.0.0-343版本为例)。
- 已安装JDK 1.8环境,并配置相关环境变量。
- 已获取Kettle工具套件。工具包中包括DWS驱动包、Redshift驱动包、plugin文件夹。
图1 Kettle工具套件
步骤一:部署Kettle工具
- 解压下载的Kettle工具包,如下图所示。
图2 解压Kettle工具包
- 解压Kettle工具套件包,将套件包中的Redshift驱动包、DWS驱动包放到Kettle工具的lib目录下。
图3 lib目录
- 将套件包中的dws-table-output-plugin文件夹复制到Kettle工具的plugin目录下。
图4 plugin目录
步骤二:新建Transformation并配置源端数据库和目标数据库
- 在Kettle工具部署好后,双击Kettle工具data-integration目录下的Spoon脚本启动Kettle工具。
图5 启动Kettle
双击后出现如下界面。
图6 Kettle界面
- 选择“File > new > transformation”,创建一个新的转换。
图7 新建transformation
- 单击view下面的Database connection,右键单击new,配置源端和目的端的数据库连接。
- 源端redshift-VD库连接配置如下:
- jdbc:redshift://dwdsi-simulacao.cslagxelrdnm.us-east-1.redshift.amazonaws.com:xxxx/dsidw
- Username: xxxxxxx
- Password:xxxxxxx
图8 配置源端
- 目的端DWS-VD库连接配置如下:
- Host Name: DWS的弹性公网IP。
- Database Name:dws_vd
- Username:dbadmin
- Password:dbadmin用户的密码。
图9 配置目标端
图10 options
数据库连接成功后,分别右键单击源端和目的端连接,再单击share共享该连接,这样在后续的任务配置中就无需再配置数据库连接。
- 源端redshift-VD库连接配置如下:
- 分别将Design下面Input和Output目录下的Table input组件和DWS TableOutput组件拖到右侧面板中。
- 右键单击Table input组件的连接线,将两个组件连接起来。
图11 连接组件
步骤三:迁移数据
全量数据迁移
- 右键编辑Table input,数据库选择源端数据库连接。
图12 编辑Table input
- 右键编辑DWS TableOutput,数据库选择目的端数据库连接。勾选Turncate table、Specify database fields,同时选择Database fields下的Get fields获取源端和目的端的字段映射连接,单击OK。
图13 编辑Table output
图14 编辑Database fields
- 配置好后单击Run,开始执行迁移任务。
图15 执行Run
增量数据迁移
增量迁移和全量迁移的步骤大致相同,区别在于源端SQL中增加了where条件,目的端配置去掉了勾选Turncate table。
- 右键编辑Table input,数据库选择源端数据库连接。
图16 编辑Table input
- 右键编辑DWS TableOutput,数据库选择目的端数据库连接。去勾选Truncate table,同时选择Database fields 下的Get fields获取源端和目的端的字段映射连接,单击OK。
图17 编辑TableOutput
- 配置好后单击Run,开始执行迁移任务。
图18 执行Run
步骤四:并发执行迁移作业
Job任务配置,就是将上面配置好的多张表的Transformation放到一个任务里面执行,达到多并发执行的目的,从而提高执行效率。
- 选择“File > New >Job”,拖拽相应的组件到面板,用连接线连接到一起,如下图所示。
图19 新建job
- 分别双击配置相应的Transformation,选择之前已经配置保存好的转换任务,如下图所示。
图20 配置transformation
- 右键Start组件,勾选Run Next Entries in Parallel组件,设置任务并发执行,如下图所示。
图21 设置并发
设置成功后,Start组件和Transformation组件之间会多一个双斜杠,如下图所示。
图22 设置并发成功
- 单击Run,开始并发执行转换任务。
图23 执行并发Run
步骤五:优化迁移作业
- 配置Kettle内存。
为了增加Kettle并发数及缓存数据量大小,可以设置Kettle的内存大小。
用Notpad++打开Spoon.bat脚本,编辑内存相关内容,一般建议为主机内存的60%-80%,如下图所示。
图24 配置内存
- 配置Job。
- 当表数据量小于千万时,Job调度的表个数建议配置在10个左右。
- 对于相对大一点的表,例如1亿左右的数据,建议配置2~3个即可,这样配置,即使其中一个任务中途失败,也可以打开相应的转换任务,单独调度,提高效率。
- 对于数据量超过1亿以上的表,尤其是字段数特别多的表,Kettle抽取效率相对较慢,可以根据业务实际情况选择相应的迁移方式。
图25 配置Job
- 在配置任务的时候,尽量将表数据量大致相同的任务放到一个Job中,这样可以保证所有任务执行完成的时间大致相同,不会有拖尾任务,影响下一个job的执行。
- 如果任务出错,可以查看相应的报错日志,一般情况下遇到的都是源端连接限制导致断开的问题。遇到该情况,可以重启Kettle软件,重试即可。