使用Kettle迁移AWS Redshift小表到DWS集群
本实践演示如何使用开源工具Kettle将Redshift数据迁移到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和相关套件包。
- 步骤一:元数据迁移:使用DSC工具进行迁移。
- 步骤二:新建Transformation并配置源端数据库和目标数据库:创建一个transformation任务,配置好源端和目标端数据库。
- 步骤三:迁移数据:包括全量迁移、增量迁移。
- 步骤四:并发执行迁移作业:创建一个job,用于并发执行多个transformation任务,达到并发迁移多张表的目的。
- 步骤五:优化迁移作业:通过调整Kettle内存大小和Job的任务数量,提高迁移效率。
- 步骤六:表数据校验:迁移后数据一致性验证。
迁移前准备
- 已经购买了DWS集群,并已绑定弹性公网IP,并已规划创建好目标数据库dws_vd。
- 已获取DSC工具包,下载并安装DSC。
- 已获取DataCheck工具包,下载并安装DataCheck。
- 已获取Kettle工具包和dws-client相关插件,并配置好Kettle,参见使用开源Kettle导入数据的“准备Kettle环境”和“安装dws-client自定义插件”部分。
- 已安装JDK 1.8环境,并配置相关环境变量。
步骤一:元数据迁移
使用华为云自研工具DSC迁移,将Redshift中客户源端导出的样例表的DDL语句转成DWS中可执行的SQL。
- 解压获取到的DSC工具包,将需要转换的文件放入DSC的input目录下。
Redshift表结构设计中不含索引,影响性能的关键点取决于DDL中的数据分布键DISTSTYLE和排序键SORTKEY。
图1 DDL语句 - 自定义配置features-pg.properties文件。
图2 features-pg.properties文件
- 进入到DSC对应目录下,执行runDSC脚本。Windows环境下双击runDSC.bat。(Linux环境下执行runDSC.sh。)
- 执行以下命令进行语法转换。
1
runDSC.bat -S postgres
图3 DSC转换 - 查看结果及转换信息。
图4 转换结果
- 连接DWS,执行上一步转换完成的DDL语句,完成建表。
步骤二:新建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条件,目的端配置去掉了勾选Truncate 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软件,重试即可。
步骤六:表数据校验
迁移完成之后,可使用数据校验工具DataCheck校验源端、目标端的数据是否一致。
- 下载软件包后,解压DataCheck-*.zip包,进入DataCheck-*目录,即可使用。目录下各文件的使用说明参见表1。
- 配置工具包。
- Windows环境下:
打开conf文件夹中的dbinfo.properties文件,根据实际需要进行配置。Redshift源的配置参考下图:图26 配置DataCheck
文件中的密码src.passwd和dws.passwd可使用工具,执行以下命令生成密文。
encryption.bat password
运行成功后会在本地bin目录下生成加密文件,如下图。
- Linux环境下:
其他步骤相同。密文生成方法与上文中Window环境下的方法类似,命令为sh encryption.sh [password]。
- Windows环境下:
- 执行数据校验。
Windows环境下:
- 打开check_input.xlsx文件,将要校验的Schema、数据库、源表、目标端表填入,Row Range可根据需要填写特定范围的数据查询语句。
- 源端的库名在配置文件中配置后,check_input.xlsx文件中的源端会默认填写配置文件中的库名,若check_input.xlsx文件中填入其他库名,以check_input.xlsx文件中的优先级为高。
- 校验级别Check Strategy支持high、middle、low三种,若未填写,默认为low。
- 校验模式Check mode支持statistics,即统计值校验。
下图为元数据对比的check_input.xlsx文件。
图27 check_input.xlsx - 在bin目录下使用命令datacheck.bat执行校验工具:
- 查看已生成的校验结果 check_input_result.xlsx:
下图为源端元数据与目标端不一致的结果。
统计值校验参考下图。
Linux环境下:
- 编辑check_input.xlsx文件并上传,参考Window环境下的第一步。
- 使用命令sh datacheck.sh执行校验工具。
- 查看校验结果check_input_result.xlsx(校验结果分析与Windows场景相同)。
- 打开check_input.xlsx文件,将要校验的Schema、数据库、源表、目标端表填入,Row Range可根据需要填写特定范围的数据查询语句。
参考信息
更多参考信息可查看工具指南-DataCheck。
文件或文件夹 |
说明 |
|
---|---|---|
DataCheck |
bin |
保存校验工具入口脚本。
|
conf |
配置文件,进行源数据库和目的数据库的连接配置和日志打印设置。 |
|
lib |
保存校验工具运行所需的相关jar包。 |
|
check_input.xlsx |
|
|
logs |
压缩包中不包含该文件,校验工具执行后自动生成,记录工具运行过程日志。 |
|
check_input_result.xlsx |
压缩包中不包含该文件,执行校验工具后会在check_input.xlsx相同路径下生成校验结果文件。 |
DataCheck工具介绍 |
---|
|
校验级别 |
校验说明 |
校验相关语法 |
---|---|---|
低 |
|
|
中 |
|
|
高 |
|
|