文档首页/ 数据仓库服务 GaussDB(DWS)/ 最佳实践/ 数据迁移/ 使用Kettle迁移AWS Redshift小表到GaussDB(DWS)集群
更新时间:2024-12-19 GMT+08:00
分享

使用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的基本流程如下:

  1. 迁移前准备:准备迁移工具Kettle和相关套件包。
  2. 步骤一:部署Kettle工具:配置Kettle工具。
  3. 步骤二:新建Transformation并配置源端数据库和目标数据库:创建一个transformation任务,配置好源端和目标端数据库。
  4. 步骤三:迁移数据:包括全量迁移、增量迁移。
  5. 步骤四:并发执行迁移作业:创建一个job,用于并发执行多个transformation任务,达到并发迁移多张表的目的。
  6. 步骤五:优化迁移作业:通过调整Kettle内存大小和Job的任务数量,提高迁移效率。

迁移前准备

  • 已经购买了GaussDB(DWS)集群,并已绑定弹性公网IP,并已规划创建好目标数据库dws_vd
  • 已获取Kettle工具包,下载地址(本文以9.4.0.0-343版本为例)。
  • 已安装JDK 1.8环境,并配置相关环境变量。
  • 已获取Kettle工具套件。工具包中包括DWS驱动包、Redshift驱动包、plugin文件夹。
    图1 Kettle工具套件

步骤一:部署Kettle工具

  1. 解压下载的Kettle工具包,如下图所示。

    图2 解压Kettle工具包

  2. 解压Kettle工具套件包,将套件包中的Redshift驱动包DWS驱动包放到Kettle工具的lib目录下。

    图3 lib目录

  3. 将套件包中的dws-table-output-plugin文件夹复制到Kettle工具的plugin目录下。

    图4 plugin目录

步骤二:新建Transformation并配置源端数据库和目标数据库

  1. 在Kettle工具部署好后,双击Kettle工具data-integration目录下的Spoon脚本启动Kettle工具。

    图5 启动Kettle

    双击后出现如下界面。

    图6 Kettle界面

  2. 选择“File > new > transformation”,创建一个新的转换。

    图7 新建transformation

  3. 单击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共享该连接,这样在后续的任务配置中就无需再配置数据库连接。

  4. 分别将Design下面Input和Output目录下的Table input组件和DWS TableOutput组件拖到右侧面板中。
  5. 右键单击Table input组件的连接线,将两个组件连接起来。

    图11 连接组件

步骤三:迁移数据

全量数据迁移

  1. 右键编辑Table input,数据库选择源端数据库连接。

    图12 编辑Table input

  2. 右键编辑DWS TableOutput,数据库选择目的端数据库连接。勾选Turncate table、Specify database fields,同时选择Database fields下的Get fields获取源端和目的端的字段映射连接,单击OK。

    图13 编辑Table output
    图14 编辑Database fields

  3. 配置好后单击Run,开始执行迁移任务。

    图15 执行Run

增量数据迁移

增量迁移和全量迁移的步骤大致相同,区别在于源端SQL中增加了where条件,目的端配置去掉了勾选Turncate table。

  1. 右键编辑Table input,数据库选择源端数据库连接。

    图16 编辑Table input

  2. 右键编辑DWS TableOutput,数据库选择目的端数据库连接。去勾选Truncate table,同时选择Database fields 下的Get fields获取源端和目的端的字段映射连接,单击OK。

    图17 编辑TableOutput

  3. 配置好后单击Run,开始执行迁移任务。

    图18 执行Run

步骤四:并发执行迁移作业

Job任务配置,就是将上面配置好的多张表的Transformation放到一个任务里面执行,达到多并发执行的目的,从而提高执行效率。

  1. 选择“File > New >Job”,拖拽相应的组件到面板,用连接线连接到一起,如下图所示。

    图19 新建job

  2. 分别双击配置相应的Transformation,选择之前已经配置保存好的转换任务,如下图所示。

    图20 配置transformation

  3. 右键Start组件,勾选Run Next Entries in Parallel组件,设置任务并发执行,如下图所示。

    图21 设置并发

    设置成功后,Start组件和Transformation组件之间会多一个双斜杠,如下图所示。

    图22 设置并发成功

  4. 单击Run,开始并发执行转换任务。

    图23 执行并发Run

步骤五:优化迁移作业

  1. 配置Kettle内存。

    为了增加Kettle并发数及缓存数据量大小,可以设置Kettle的内存大小。

    用Notpad++打开Spoon.bat脚本,编辑内存相关内容,一般建议为主机内存的60%-80%,如下图所示。

    图24 配置内存

  2. 配置Job。

    • 当表数据量小于千万时,Job调度的表个数建议配置在10个左右。
    • 对于相对大一点的表,例如1亿左右的数据,建议配置2~3个即可,这样配置,即使其中一个任务中途失败,也可以打开相应的转换任务,单独调度,提高效率。
    • 对于数据量超过1亿以上的表,尤其是字段数特别多的表,Kettle抽取效率相对较慢,可以根据业务实际情况选择相应的迁移方式。
      图25 配置Job
    • 在配置任务的时候,尽量将表数据量大致相同的任务放到一个Job中,这样可以保证所有任务执行完成的时间大致相同,不会有拖尾任务,影响下一个job的执行。
    • 如果任务出错,可以查看相应的报错日志,一般情况下遇到的都是源端连接限制导致断开的问题。遇到该情况,可以重启Kettle软件,重试即可。

相关文档