Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

Kattle的工程存储方式有(1)以XML形式存储,(2)以资源库方式存储(不同的用户可以共同使用)

Kattle的两种设计:

  1. Transformation(转换):针对于数据的基础转换(着重于数据的ETL过程)
  2. Job(作业):完成整个工作流的控制(着重于不同步骤之间的控制流程)

区别:

  1. 一个Job中可以包含多个Transformation
  2. Transformation是数据流,Job是步骤流
  3. Job按照顺序执行,每一个步骤必须等待前一个步骤结束后才会执行
    Transformation是一次性启动所有的控件,然后数据流从第一个控件开始,一条记录,一条记录的流向最后一个控件

Kattle的组成

  1. Spoon(勺子)(Spoon.bat/Spoon.sh):图形化页面
  2. Pan(煎锅)(Pan.bat/Pan.sh)用命令行的形式调用Transformation
  3. Kitchen(厨房)(Kitchen.bat/Kitchen.sh)用命令行的形式调用Job
  4. Carte(菜单)(Carte.bat/Carte.sh)Carte是一个轻量级的Web容器,用于建立专用的、远程的ETL Server

具体使用

MySQL到MySQL

利用Transformation将数据从一张表输出到另一张表里面

在mysql数据库中创建两张表,分别是stu1和stu2,现在要将stu1的数据写入stu2里面

stu1

kettle kafka 脚本 kettle与kafka_数据仓库

stu2

kettle kafka 脚本 kettle与kafka_kettle_02


然后来到kattle的可视化界面,通过Spoon.bat进入(Windows环境)

kettle kafka 脚本 kettle与kafka_kettle kafka 脚本_03


分别在左侧的侧边栏中找到表输入和插入/更新,表输入用来从mysql数据库的表中获取数据,而插入/更新用来将获取到的数据插入到另一张表中。这里按照shift即可在两个控件之间画上一条带箭头的线,这样两个控件之间就建立了联系

这里右上角会有绿色的对号图标,是因为我已经成功运行了一遍然后双击第一个表输入图标,编辑配置

kettle kafka 脚本 kettle与kafka_kettle kafka 脚本_04


这里需要配置的地方有两个,一个是数据库连接配置,一个是sql语句

kettle kafka 脚本 kettle与kafka_transformation_05


数据库连接配置用来连接要使用的数据库

而sql语句用来选择从stu1表中获取哪些数据写入到stu2表中然后再双击下一个控件,查看相关的配置信息

kettle kafka 脚本 kettle与kafka_数据仓库_06


数据库连接会自动获取上一个控件 表输入 配置好的信息,而目标表需要自己选择,这里要写入到stu2

用来查询的关键字,用id在stu1表和stu2之间做一个连接,这里指定name和id都可以,但是如果指定age就会报错,因此stu2表中没有age字段,在查询时就会因为查询不到stu2表的age字段而报错

更新字段,用来决定对哪些字段进行更新

用job来完成表数据的写入以及更改

kettle kafka 脚本 kettle与kafka_数据仓库_07


在start里面可以设置任务的定时

转换里面是之前保存的转换文件,即将stu1表里面的数据写入到stu2中

kettle kafka 脚本 kettle与kafka_kettle_08


在sql里面编写要执行的sql语句脚本

kettle kafka 脚本 kettle与kafka_数据仓库_09


重新建立数据库的连接,然后在脚本里面编写的sql语句,会在上一步的转换过程结束后执行

最终结果为

kettle kafka 脚本 kettle与kafka_数据仓库_10

mysql到hbase

kettle kafka 脚本 kettle与kafka_kettle kafka 脚本_11


最开始是两个表输入控件,分别从mysql的student表和score表里面获取数据,使用的sql语句分别是

select * from student

select student_id,sum(score) from score group by student_id对student表需要进行一下过滤,过滤出班级为理科的学生

kettle kafka 脚本 kettle与kafka_kettle kafka 脚本_12


在记录集连接控件之前,要对所有的表进行排序,这里就按照student的id字段,和score表的student_id字段进行排序然后按照id和student_id进行两张表的连接

kettle kafka 脚本 kettle与kafka_etl_13


在字段选择控件中,可以对表连接后的全部字段进行选择,选择具体将哪些字段的值写入到hbase中

最后的Hbase output控件将两张mysql里面的表连接后的数据写入到hbase中,但是在这个控件里面同样需要配置许多东西

首先是配置hadoop集群

kettle kafka 脚本 kettle与kafka_etl_14

kettle kafka 脚本 kettle与kafka_transformation_15


kettle kafka 脚本 kettle与kafka_etl_16

测试的时候,有着打勾的选项就够了,其余的不用配置

kettle kafka 脚本 kettle与kafka_kettle_17


然后

kettle kafka 脚本 kettle与kafka_etl_18


然后在hbase中创建一张表,create ‘kettle_demo’,‘info’

来到mappings的选项页下面,配置一下hbase表的映射关系,点击左下角的Save mapping,将映射关系保存为Mapping1

kettle kafka 脚本 kettle与kafka_数据仓库_19


然后再回到原先的选项页下面

kettle kafka 脚本 kettle与kafka_etl_20


保存退出后,点击运行

kettle kafka 脚本 kettle与kafka_kettle kafka 脚本_21


到hbase中查看一下

kettle kafka 脚本 kettle与kafka_kettle kafka 脚本_22


写入成功