技术开发 频道

干货放送:基于Kettle的数据处理实践

  【IT168 技术】在当前大数据环境下,我们处理数据迁移、转换的工作会越来越多,数据仓库的概念也越来越被熟知,现在有很多成熟的工具提供ETL 功能,即将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。例如Datastage 做为ETL最专业的ETL,占据了不少的市场份额,但其价格不菲;DecisionStream 和Powercenter也许价格会便宜一些,但同样需要支付人民币;OWB 和ODI 做为数据库厂商提供的ETL 工具,其局限性就是和oracle 数据库的耦合度太深;ETL Automation 提供了一套ETL 框架,但是其对数据库依赖性强;Beeload 作为国产ETL 工具的领先者,但产品化程度还有一定距离;而这其中Kettle 不失为一个好的选择,是因为它作为一个少有的开源的ETL 工具,绿色无需安装,数据抽取高效稳定,可以在Window、Linux、Unix 上运行,并且提供了一套界面操作的解决方案,从而代替原有的程序开发,深受大多数IT 人的喜爱。

  本文以Window 环境为例,主要介绍了从Mysql 数据库中对数据进行抽取整理,经过一定的处理后写入到另一台Mysql 数据库的方案。

  一.Kettle平台准备

  • 1.JDK 环境准备

  确认当前JDK 1.7或以上版本,如果当前系统已安装,则直接验证:

基于Kettle 的数据处理实践

  如果当前系统没有安装JDK 或者版本较低,则需要手动下载安装,并配置Java 环境变量。

  右击“计算机”→“属性”→“高级系统设置”→“高级”→“环境变量”

  (1)选择“系统变量”,新添加

  JAVA_HOME:C:\Program Files (x86)\Java\jdk1.7.0_71

  CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

  (2)选择“用户环境变量”,编辑“Path”,在已有变量后添加:

  ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

  见下图:

基于Kettle 的数据处理实践

基于Kettle 的数据处理实践

  再次验证JDK。

  • 2. Kettle 安装包准备

  访问

  http://sourceforge.net/projects/pentaho/files/Data%20Integration/ 下载kettle 安装包,当前最新版本为pdi-ce-5.4.0.1-130。因为kettle 为绿色软件,解压缩到任意本地路径即可。

  • 3. Mysql JDBC 安装

  Kettle 支持当前主流数据库mysql、DB2、Oracle 等,在连接数据库之前首先需要下载对应数据库的JDBC 并上传至Kettle 解压缩目录的lib 路径下。

  本环境中下载mysql jdbc:mysql-connector-java-5.1.18-bin.jar 复制到lib 路径下。

  • 4. Kettle 环境验证

  至此,kettle 配置完成,找到解压缩目录下的Spoon.bat 并运行,即GUI 界面如下图所示:

基于Kettle 的数据处理实践

  二.Kettle 的数据流处理

  确认源数据库,在此测试环境中我们定了一个名为source table 的表,用于记录VMware平台中的Host、Cluster、DataCenter 的对应关系以及获取记录的datetime 和Host 的网卡数。我们首先要确认一下源数据库的数据库表结构,如图:

基于Kettle 的数据处理实践

  • 1. 源数据的抽取

  Kettle 配置源数据库连接,“文件”→“新建”→ “转换”,左侧Design 栏,选择“输入”→“表输入”,创建一个名为“源数据输出”的表输入步骤,双击进入“源数据输出”,“数据库连接”处选择“新建”一个“源数据库”连接,配置源Mysql 数据库的参数信息并测试连接,如图所示:

基于Kettle 的数据处理实践

  接下来根据我们的业务需求,首先需要选择出我们所需要处理的数据,通过双击选择“源数据输出”步骤,编辑SQL,即获取所需要抽取的数据模型。如下图。而在这此步骤的操作流程中,需要我们注意的是SQL 语句的编辑。

基于Kettle 的数据处理实践

  在编辑的过程中,通过“预览”按钮就可以预览执行SQL 的结果。

基于Kettle 的数据处理实践

  • 2. 数据流的加工处理

  在上一步的预览得到的数据中,可能还需要我们对数据做进一步的处理,比如对数据的升降排序、和其他数据表做一些join、对空值的处理、对重复值的处理等等,在此,我们可以利用Kettle 自带的Transform 进行处理。

  在此次的测试环境中,我们做了排序和空值的处理,见图:

基于Kettle 的数据处理实践

  其中“排序”的配置如下,我们选择了datetime 和HostName 的升序排序,配置如下图:

基于Kettle 的数据处理实践

  在“判断是否为空值”的配置上做了一条测试记录,如果Nic_Number 值为空,就用数字0 来代替,如下图:

基于Kettle 的数据处理实践

  • 3. 目标数据的写入

  再创建一个名为“目标数据输入”的表输出步骤,配置目标数据库的参数信息,左侧Design 栏选择“输出”→“表输出”,创建一个“目标数据输入”的表输出步骤,在“数据库连接”处新建一个“目标数据库”,输入对应的目标数据库参数信息并测试Kettle 和Mysql 的数据库成功连接,选择目标数据库表,如图所示:

基于Kettle 的数据处理实践

  目标数据库配置并能正常连接后,我们需要配置的是数据流字段和目标数据库表字段的对应关系,见图。其中Table field 为目标数据表字段,Stream field 为经过kettle 处理的数据流字段,二者名称可以一致也可以不一致,在配置的时候做好对应即可。

基于Kettle 的数据处理实践

  至此,源数据的抽取,数据流的加工处理,目标数据库的写入已经配置完成,整个Kettle的转换脚本也就完成了。

  三.Kettle 脚本执行

  • 1. Kettle 脚本的执行调试

  在Kettle UI 界面下,可以手动执行调试以上完成的Transformation 的脚本。

  在“步骤度量”界面中可以实时查看当前脚本的执行进度:

基于Kettle 的数据处理实践

  在Preview data 界面中可以查看每一步所执行的结果:

基于Kettle 的数据处理实践

  在Logging 界面中可以查看执行此脚本的日志状态,如有异常报错,可在此查看并根据报错修复脚本的配置,下图日志为执行成功的日志。

基于Kettle 的数据处理实践

  Kettle 脚本调试执行成功,保存脚本为*.ktr 格式。

  • 2. Kettle 脚本的自动化执行

  对于日常处理的大数据而言,大多数需要定时自动执行而非图形化界面手动执行。而Kettle 同样提供了命令行执行的方法,Kitchen(job 执行器)和Span(transformation执行器)。

  我们需要编辑Win 定时bat 脚本,格式如下:

  C:\Kettle\data-integration\Pan.bat /file C:\ETL\*.ktr /logfile

  C:\ETL\logs\*.log

  即对于以上脚本的实现,配置定时任务并执行该*.bat 脚本即可实现数据的定时处理。在对脚本的编辑过程中,要多加注意脚本的语法格式。

  四.总结

  Kettle 做为一款功能强大的开源ETL 工具,本文只是介绍了从库到库的抽取过程,在数据流的处理上,也只是用到了排序和空值的判断,而kettle 还有其他更强大的功能还需要我们不断的去尝试。以上测试场景可以扩展为多数据表合并,多平台数据库的迁移、整合等,我们可根据具体的实际应用而使用。

  在此次实施过程中,配置“目标数据库输入”的时候,如果涉及到的目标表字段较多的情况下,注意表字段和流字段的对应,所以建议在数据库建表和数据流处理的过程中要多加注意命名规则的问题。

  参考资料

  Kettle Help Documentation

  http://community.pentaho.com/projects/data-integration/

  http://wiki.pentaho.com/display/EAI/Latest+Pentaho+Data+Integrati

  on+(aka+Kettle)+Documentation/

  作者简介

  王伟

  任职于某大型外资IT 企业,从事IBM ITM 的部署维护工作,参与私有云的运维和开发工作,熟悉VMware、PowerVC、KVM 等常见虚拟化产品,参与部署多个ITM 项目,拥有丰富的IT 架构部署经验。

2
相关文章